默认

一种简单保障IM消息可靠性和有序性的实现方案

查看数: 31737 | 评论数: 14 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-04-10 17:27

正文摘要:

定义 消息可靠性:不丢失、不重复 消息有序性:任意时刻消息保证与发送端顺序一致 总结:不丢、不重、有序 典型的 IM 架构 典型的服务端中转型IM架构:一条消息从 clientA 发出后,需要先经过 IM 服务 ...

评论

pigfu 发表于 2 个月前
上行消息有序方案,maxClient+1=clientSeq。能否说一下发送方多端怎么应对?及时做clientSeq的同步吗?
pigfu 发表于 2 个月前
引用:JackJiang 发表于 2024-09-03 10:31
如果消息序列号是有序的,这种情况在客户端进行顺序重排比较合理

发送方多端 没啥用吧
pigfu 发表于 2 个月前
引用:小菜菜 发表于 2024-09-02 23:00
你好,在上行消息中:依赖clientId,
问题1,如果客户端发送消息3456,如果3没处理,就算456先到,也没法 ...

上行消息小节通过maxClientId+1=clientId来防止网络抖动导致的先发后至服务端的问题,但是如果一条消息出问题,,后面的所有消息都可能受到连累,为什么不直接让客户端发一条消息,受到服务端ACK,再发下一条?
JackJiang 发表于 8 个月前
引用:小菜菜 发表于 2024-09-03 00:03
客户端发送消息3456,如果3没处理,就算456先到,也没法处理对吧

如果消息序列号是有序的,这种情况在客户端进行顺序重排比较合理
JackJiang 发表于 8 个月前
引用:小菜菜 发表于 2024-09-02 23:25
关于防止重复,上行消息,客户端在一个会话内生成一个消息的递增id,服务端存储当前会话的max cid,对于群 ...

所以这个“当前会话的max cid”最好是保存在客户端啦
小菜菜 发表于 8 个月前
如果3重试也失败了,之后需要用户重新触发,拿3可能变成了7,但是因为服务端的maxClientId还是2,怎么办,后面消息一直没法成功
小菜菜 发表于 8 个月前
客户端发送消息3456,如果3没处理,就算456先到,也没法处理对吧
小菜菜 发表于 8 个月前
客户端发送消息3456,如果3没处理,就算456先到,也没法处理对吧
如果3重试也失败了,之后需要用户重新触发,拿3可能变成了7,但是因为服务端的maxClientId还是2,怎么办,后面消息一直没法成功
小菜菜 发表于 8 个月前
关于防止重复,上行消息,客户端在一个会话内生成一个消息的递增id,服务端存储当前会话的max cid,对于群聊和多设备场景都会导致客户端维护消息递增id重复,
小菜菜 发表于 8 个月前
你好,在上行消息中:依赖clientId,
问题1,如果客户端发送消息3456,如果3没处理,就算456先到,也没法处理对吧,
问题2: 如果3重试也失败了,之后需要用户重新触发,拿3可能变成了7,但是因为服务端的maxClientId还是2,怎么办,后面消息一直没法成功

在下行消息中:
问题1: 如果推送给b一直没成功,对于b来说没有感知,怎么回复ack
肥猫布里奇高 发表于 2 年前
引用:JackJiang 发表于 2023-04-10 18:24
简单帮你重新排了个版,你看看是不是阅读体验要好多了。其实还可以优化地更好

感谢站长大大!
JackJiang 发表于 2 年前

简单帮你重新排了个版,你看看是不是阅读体验要好多了。其实还可以优化地更好
肥猫布里奇高 发表于 2 年前
引用:JackJiang 发表于 2023-04-10 17:32
楼主你好,你这贴的是markdown语法,我这里不支持MD语法,你可以直接在文本编辑模式下,用编辑器里自带的效 ...

已修改
JackJiang 发表于 2 年前
楼主你好,你这贴的是markdown语法,我这里不支持MD语法,你可以直接在文本编辑模式下,用编辑器里自带的效果去排版

返回顶部