在实现 web im 消息功能中,如果消息发送失败,当重发的时候会不会出现接收方多次收到消息?
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
在实现 web im 消息功能中,如果消息发送失败,当重发的时候会不会出现接收方多次收到消息?
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
这里可以增加一个 clientSendMsgId 字段,由发送方生成,服务端校验,30分钟内只重复一次的 uuid
带入真实场景
失败重发场景
clientSendMsgId: 1
,设置为 pending 状态clientSendMsgId: 1
。clientSendMsgId
是否重复客户端超时,服务端多收场景
clientSendMsgId: 1
,设置为 pending 状态clientSendMsgId: 1
。只有首次有效,后面的被遗弃。通过一个发送方的校验去重字段即可实现唯一消息的功能。