【自问自答】IM 消息失败重试应该怎么实现?
在实现 web im 消息功能中,如果消息发送失败,当重发的时候会不会出现接收方多次收到消息?
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
回答:
这里可以增加一个 clientSendMsgId 字段,由发送方生成,服务端校验,30分钟内只重复一次的 uuid
带入真实场景
失败重发场景
- 用户发送消息
clientSendMsgId: 1
,设置为 pending 状态 - 当有结果时变为 resolved 或者 rejected。
- 如果是失败,点击重发,继续发送
clientSendMsgId: 1
。 - 服务端每次收到消息都判断
clientSendMsgId
是否重复
- 用户发送消息
客户端超时,服务端多收场景
- 用户发送消息
clientSendMsgId: 1
,设置为 pending 状态 - 当结果是 rejected (timeout),用户多次重试
- 服务端多次收到
clientSendMsgId: 1
。只有首次有效,后面的被遗弃。
- 用户发送消息
通过一个发送方的校验去重字段即可实现唯一消息的功能。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
以上是 【自问自答】IM 消息失败重试应该怎么实现? 的全部内容, 来源链接: utcz.com/p/933851.html