默认
发表评论 7
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教web端IM聊天功能中的聊天历史记录应该怎样保存?
阅读(45461) | 评论(7 收藏 淘帖1
最近在开发web的即时聊天功能,需要有离线消息功能,消息提醒功能。

在BS架构下,所有历史消息需要存储在数据库中吗,如果存储在数据库中,表结构应该怎样设计,如果存储在redis中,服务器的内存大小有要求吗个人的设计思路:

本人很少用到redis缓存机制,不太清楚需要什么时候使用最好,所以姑且还是遵从的数据库读写的那套思路。首先创建一张表来存储所有的消息记录,表字段有id(唯一键)touserid(消息接收者)fromuserid(消息发送者)hasread(是否已读)timestamp(时间戳),聊天连接初始化时查询touserid和fromuserid是当前用户id的数据项并分别作为对方发送的聊天信息和己方发送的聊天信息显示在浏览器界面上,并根据时间戳排序,但是这样的问题是用户一多(1000+)初始化加载速度就比较慢了。

以上就是本人的设计思路,恳请大家能提供下成熟的设计方案

附:现阶段不需要考虑分布式和高并发量的问题

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:IM开发 求助
上一篇:求教IM系统如何实现多端推送与消息同步?下一篇:求助android端使用netty的websocket实现TLS/SSL加密

本帖已收录至以下技术专辑

推荐方案
评论 7
引用:JackJiang 发表于 2021-06-17 17:19
你的历史记录加载是用ajax异步调用的吧,界面上加个菊花进度条滚动,体验不会差的

好的
引用:狼与梦想家 发表于 2021-06-17 15:31
就是聊天记录是一个一个div拼起来的,新来的聊天记录就是在父容器基础上append。这样
其他的我都搞明白 ...

你的历史记录加载是用ajax异步调用的吧,界面上加个菊花进度条滚动,体验不会差的
引用:JackJiang 发表于 2021-06-17 14:30
web端im的聊天记录也只是在登陆后加载一次,上次后的消息,都是实时接收,不需要每次都从服务端加载,所 ...

就是聊天记录是一个一个div拼起来的,新来的聊天记录就是在父容器基础上append。这样
其他的我都搞明白了,受教~
引用:狼与梦想家 发表于 2021-06-17 11:39
我这边聊天记录是聊天页面加载的时候用字符串拼接的,所以用户多了之后首页面内容就很多,加载就慢了。
...

web端im的聊天记录也只是在登陆后加载一次,上次后的消息,都是实时接收,不需要每次都从服务端加载,所以这一块性能要求上没那么夸张。

“聊天页面加载的时候用字符串拼接的”:这句是怎么理解,或者具体来说,什么叫字符串拼接的,我不理解你的做法
引用:JackJiang 发表于 2021-06-17 11:15
web端的聊天记录肯定是按传统的web处理方式,别去整html5里的本地存储,那玩意必竟还是太新了,浏览器兼容 ...

我这边聊天记录是聊天页面加载的时候用字符串拼接的,所以用户多了之后首页面内容就很多,加载就慢了。

所以说聊天记录还是存在服务器端对吧,那是应该存在redis中还是数据库中比较好,如果是用redis存储,项目现在是跑在单服务器中,内存容量够用吗
web端的聊天记录肯定是按传统的web处理方式,别去整html5里的本地存储,那玩意必竟还是太新了,浏览器兼容问题会麻烦,比如老一点的浏览器就那没辙。

服务端存的话,你“用户一多(1000+)初始化加载速度就比较慢了”,这个怎么理解?为什么会慢?你是指你的用户量多了,服务端性能会跟不上?
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部