默认
发表评论 6
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教关于IM离线聊天消息同步策略的的一些疑惑
阅读(45629) | 评论(6 收藏 淘帖1
一般IM消息离线消息同步都是全量同步吗?像钉钉这样的 OA IM一般都是咋做的,有哪位大佬了解?

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

标签:求助 IM开发
上一篇:IM开发基础知识补课(六):数据库用NoSQL还是SQL?读这篇就够了!下一篇:跟着源码学IM(三):基于Netty,从零开发一个IM服务端

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

推荐方案
评论 6
http://www.52im.net/thread-594-1-1.html 这个帖子看过了,有些疑问
文中提到了 消息接收方一次拉取大量离线消息导致速度慢、卡顿的解决方法

假设有1000条离线消息,其中前100条是同一个会话中的,每次分页拉取也是100条,那么岂不是第一次拉下来的时候的消息全部是一个会话的,其他会话就不更新吗?
签名: 最后两天了 坚持住 你行的!
你的问题,可以这么回答。

1)正常情况下,一个典型的IM产品,离线聊天记录都应该设置一个保存时限,必竟聊天消息这种东西都是有时效性的,比如你朋友1个月前发给你的消息,你1个月后才看到,基本就没有意义了,因为真是重要信息的话,肯定不会等到你1个月后才在im里收录,他会第一时间电话或短信就联系上你了。

比如,微信的离线消息只保留72小时:
求教关于IM离线聊天消息同步策略的的一些疑惑_WX20190920-104340@2x.jpg

所以,不钻牛角尖的话,一个正常im,其实离线消息并没有那么多。

2)假设极端情况下,聊天记录的保存时限内,离线消息真有这么多,那就只能如你看到的《IM消息送达保证机制实现(二):保证离线消息的可靠投递》文章里说的分布拉取,这个分布不是说只拉取前100条,而是说每页100条,直到全部拉取完成,而且离线消息的拉取是在后台完成的,它边拉取,你同时还一样可以用app,所以对应用来说,只要体验处理得当,是无感的。
引用:JackJiang 发表于 2019-09-30 12:08
你的问题,可以这么回答。

1)正常情况下,一个典型的IM产品,离线聊天记录都应该设置一个保存时限,必 ...

对于微信,qq这样的im可以这样,但是对于OA的IM,比如钉钉,任何一个客户端都能够看到所有消息,如果采用分页拉取的方式,应该会看到 会话列表页不断更新吧,在消息量很大的情况下。
签名: 最后两天了 坚持住 你行的!
引用:lee3164 发表于 2019-09-30 17:23
对于微信,qq这样的im可以这样,但是对于OA的IM,比如钉钉,任何一个客户端都能够看到所有消息,如果采用 ...

那是肯定的,但这又不影响体验,何况消息量大那只是极端情况,并不是常态
钉钉的思路(业务场景),其实和日常的qq类又有所不同,它是服务器端保存所有消息(不只是离线)
你在任何一个客户端登录,如果打开某个会话查看消息的话,它会拉取所有的历史消息的,具体做法其实
和版主的说法一样(不只是离线,但不一定是分页拉取全部,而是按需)

你打开某个会话后,钉钉客户端先向你展示最新的几条消息,然后你窗口往上滚动,历史消息就会不断
展现出来,这不就是分页拉取吗
另外,由于是oa场景,钉钉服务器端保存所有历史消息,很多会话的历史消息量是很大的
(有几年积累的话,几千几万条很正常),

因此,在一台没装过钉钉客户端的新机器上登录时,钉钉客户端不太可能把所有的消息都
分页拉下来,可能对每个有消息的会话只拉取了一屏,只有你点进去查看历史聊天记录时,才会逐步拉取

楼主的问题其实与“离线消息”关系不大,而是钉钉的“全量历史消息”如何展示的问题
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部