默认
发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
关于IM离线消息拉取的疑问
阅读(50441) | 评论(5 收藏 淘帖
看了 @JackJiang 的  《IM群聊消息如此复杂,如何保证不丢不重?


有一个问题想咨询一下,如果我选择6中"
群消息优化3:离线消息表"

问题1:当用户都登录状态时,要不要每次更新last_ack_msg_id,如果不更新下一次如何得到last_ack_msg_id

问题2:登录后拉取离线消息,同时收取在线消息,如果保证last_ack_msg_id呢?

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

上一篇:浅谈移动端IM的多点登陆和消息漫游原理下一篇:IM的sdk是只需要开发一个就可以,还是不同端需要各自的sdk
推荐方案
评论 5
引用:1mok 发表于 2018-07-31 12:15
用户还未读的消息不能转储或者删除吧,如果按照用户每个群都有一个last_ack_msg_id的设计, 那么用户哪些 ...

群聊用读扩散确实让逻辑变的复杂,要考虑的东西有很多,你可以直接用写扩散,先实现了再说
引用:JackJiang 发表于 2018-07-31 11:56
聊天消息其实都是热数据,保存一段时间都可以转储或删除(比如微信官方说只保存72小时的离线消息),所以 ...

用户还未读的消息不能转储或者删除吧,如果按照用户每个群都有一个last_ack_msg_id的设计, 那么用户哪些会话有未读消息是怎么判断,服务端都需要根据用户每个群聊会话去判断是是否有未读消息吗
引用:1mok 发表于 2018-07-31 11:39
如果用户群很多的情况下,上线之后拉取离线消息或者离线消息数,是不是需要计算所有群的 last_ack_msg_id ...

聊天消息其实都是热数据,保存一段时间都可以转储或删除(比如微信官方说只保存72小时的离线消息),所以理论上数据表性能不能随着时间增长变的越来越差
引用:JackJiang 发表于 2017-07-10 15:33
这个last_ack_msg_id的作用就是为了拉离线消息用的,搞的这么复杂的唯一目的就是希望不要为每个离线用户存 ...

如果用户群很多的情况下,上线之后拉取离线消息或者离线消息数,是不是需要计算所有群的 last_ack_msg_id和max_id的差值,这样性能会越来越差吧
这个last_ack_msg_id的作用就是为了拉离线消息用的,搞的这么复杂的唯一目的就是希望不要为每个离线用户存储没有收到的群消息,而只要存一条“总”的消息。

但这个last_ack_msg_id什么时机更新,是个麻烦事,更新频烦能保证它的准确性,更新地不够即时则可能会存在重复的可能。

我个人认为,如果要用这种方案,则为了性能考虑,肯定不能频繁更新last_ack_msg_id,具体多少只能自已根具自已的系统来决定经验值。不过,即使重复了也不要紧,因为客户端可以去重(重复的不显示就是了)。

综上,回答你的问题:
1)要不要每次更新,我认为不是客户端说了算,服务端视性能来决定要什么时候更新即可。
2)你看看微信就知道,微信在登陆时是先把所有离线消息都拉完后,才收取或者说把实时消息显示给你看,即使存在先后顺序也无所谓,因为客户端在显示时可以自已决定它们真正的顺序啊。

以上仅是个人理解,仅供参考。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部