默认
发表评论 4
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[讨论] 关于IM消息增量拉取问题,比如seq序号导致的收发顺序问题
阅读(14863) | 评论(4 收藏 淘帖
1金币
服务端没有采用离线消息全量推送的方案,只有一个数据库,即离线消息的获取是采用按需分页拉去的模式同时每个用户或者群聊的会话都会生成一个Seq序列号,每个序列号都是等差递增
客户端在用户收发消息的同时会判断序列号中是否存在断链,如果存在断链的情况会去服务器拉去历史消息,防止消息丢失的情况
那么这样子因为消息的时序问题导致用户A和用户B同时发送消息,可能用户A的消息先到达服务器先拿到seq,然而B的消息却先到达客户端,此时客户端会认为消息断链了,就会去服务器拉取历史消息,拉取完成后渲染到本地消息,此时用户A发送的消息返回发送成功Seq比客户端最新的Seq要更小且用户A发送的消息已经从拉取历史消息中拉去下来并渲染了。

同时,如果说在收到不正确的顺序的消息时,客户端会去拉取历史消息,如果这个时候历史消息的请求还没有返回,此时其他seq的消息已经到达客户端。也会存在客户端渲染的问题。

总之我感觉因为这个时序 和 断链 会导致很多问题。

像这种有其他好的解决方案吗

标签:IM开发 讨论
上一篇:关于使用protobuf协议的websocket的抓包解析问题
推荐方案
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部