默认
发表评论 6
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教各位,怎么保证IM群消息在线的的用户都收到
阅读(35849) | 评论(6 收藏1 淘帖
看了下《IM群聊消息如此复杂,如何保证不丢不重?》 这篇文章的最佳解决方案是这样的:



现在存在几个疑问:
1、就是 client-X 发送消息到 server 成功后,server 要不要再发给 client-X 一个 ACK (确保 client-X 成功的发给 server 了) ?                                       
2、假设 client-B 网络抖动、客户端奔溃、突然断网、或者异常的掉线了服务器不知道……没有及时的第6步 ack ,那么它的 last_ack_msg_id 没有及时更新,等其他人再次发消息时,它的又正常的第六步 ack 了,这时 last_ack_msg_id 更新了;那它上一条消息是不是就丢了(因为群组的离线消息是根据 last_ack_msg_id 判断的)?               
3、根据 2 中提到的如果批量发送 ack 不及时,那不是丢的消息更多                                                            


各位大佬有什么高招吗?


现在一考虑到网络波动啥的原因消息没有传送成功就头大

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

上一篇:求助,IM离线消息在什么情况下保存比较合适呢?下一篇:求教IM中离线聊天消息的拉取,应该通过 http 还是 socket?
推荐方案
评论 6
引用:Sfa 发表于 2020-09-25 09:09
有没有一种可能是,B 在拉取群离线之前,收到一条群消息,然后把 last_ack_msg_id 更新了,等拉取离线的 ...

为你这个last_ack_msg_id就存在同步锁,读和写必须有个先后顺序。
引用:JackJiang 发表于 2020-09-24 23:29
1、是的,需要ACK。

2、服务端在决定删除离线消息的前提,是收到B的准确反馈,不应该做离线消息的删除这 ...

有没有一种可能是,B 在拉取群离线之前,收到一条群消息,然后把 last_ack_msg_id 更新了,等拉取离线的时候 按照刚更新的这个 last_ack_msg_id 获取的,那之前的离线就忽略了
引用:天黑请闭嘴 发表于 2020-09-24 23:32
离线消息,一般都是用http拉,楼主考虑的网络波动是什么指的什么?指的用socket长连接拉离线吗?

好像是我想偏了,对现在我们是通socket 拉取的
用http拉离线消息的话,成功或失败,服务端都能准确知道,很容易处理啊~~~
签名: 该会员没有填写今日想说内容.
离线消息,一般都是用http拉,楼主考虑的网络波动是什么指的什么?指的用socket长连接拉离线吗?
1、是的,需要ACK。

2、服务端在决定删除离线消息的前提,是收到B的准确反馈,不应该做离线消息的删除这样的操作;

3、同2,这种情况只会担心消息重复,而不是消息丢失。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部