默认
发表评论 6
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
im客户端上线时拉取离线未完成,恰好又收到实时消息怎么办?
阅读(31994) | 评论(6 收藏1 淘帖
求问一个问题呀

场景
1,B不在线,A发了消息给B,后端将离线消息入数据库
2,在一个临界的时间点,B突然上线了,分批的拉取消息

会不会有情况,导致B没有拉取到A发给B的这条信息呢,,,,
求问应该如何保证B可以完全的拉取到,所有的这种临界的消息,,,,

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

标签:求助 IM开发
上一篇:[已回复] MobileIMSDK为什么只选用RabbitMQ下一篇:阿里IM技术分享(七):闲鱼IM的在线、离线聊天数据同步机制优化实践
推荐方案
评论 6
你说的这种情况,确实有可能存在。

你可以在客户端加一个标记,就是当离线消息加载未完成的情况下,实时消息可以先放入一个缓存队列,当离线处理完成时,再把这个缓存逐一放到正常的消息显示和处理逻辑中。

微信其实也差不多是这样的逻辑,你可以做一个实验,就是把微信卸载掉,然后重装再登陆,你可以看到微信在同步离线消息的过程中消息在持续异步被加载过来,此时的实时消息也是不会先于这些离线消息显示的。
引用:JackJiang 发表于 2022-03-11 12:54
你说的这种情况,确实有可能存在。

你可以在客户端加一个标记,就是当离线消息加载未完成的情况下,实时 ...

11111,也就是客户端先处理离线消息,然后再处理后续的实时消息

但是假如B客户端上线,在分批拉取A给发给B的离线消息,
可能是由于其他原因,在扫描数据库的时候,没有扫描到这条消息,那么B客户端有什么机制或者其他地方的机制,可以将这批没有扫描到的离线消息展示在B的客户端上吗,
引用:WarriorFromLong 发表于 2022-03-11 13:18
11111,也就是客户端先处理离线消息,然后再处理后续的实时消息

但是假如B客户端上线,在分批拉取A给 ...

im这种东西,对于某Q来说,技术上有个“万有一失”的原则,也就是说,聊天消息这种东西不比金融数据,极端情况下出点小纰漏是可以容忍的,大不了再说一遍嘛。
真要纠结百分百的理论完美程度,那各方面难度和成本就上去了。做im产品,要在成本、体验上做到适可而止就行了,不能光在理论上追求完美
引用:JackJiang 发表于 2022-03-11 15:14
im这种东西,对于某Q来说,技术上有个“万有一失”的原则,也就是说,聊天消息这种东西不比金融数据,极 ...

收到,谢谢。。那就让前端过一定时间拉一下算球
不管是群的消息, 还是用户的同步timeline队列, 都用一个递增的seqNo来保证应该就没问题了. 前端拉取到的seqNo不连续, 就拉取缺失的消息.  不过这里面细节依然很多.
引用:WarriorFromLong 发表于 2022-03-11 18:54
收到,谢谢。。那就让前端过一定时间拉一下算球

打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部