请注意,本文编写于 548 天前,最后修改于 548 天前,其中某些信息可能已经过时。
目录
什么是消息的可靠投递?
消息丢失的情况
解决方案:业务层ACK机制
ACK机制中的消息重传
消息的可靠投递是指在即时消息系统中,确保消息在发送和接收过程中不丢失且不重复的能力。在设计即时消息系统的架构中,保证消息的可靠投递是非常重要的。下面是关于ACK机制如何保证消息的可靠投递的总结:
什么是消息的可靠投递?
消息的可靠投递指的是在消息发送和接收过程中,能够确保消息不丢失和不重复。对于用户来说,这两个特性对于使用体验非常重要。
消息丢失的情况
在即时消息系统中,消息丢失可能发生在以下几种情况:
- 消息发送过程中的失败:当消息发送到IM服务器时,可能由于网络不通或者服务器存储失败等原因导致消息发送失败。
- 消息推送过程中的失败:当IM服务器将消息推送给接收方时,可能由于服务器掉电或者接收方设备处理异常等原因导致消息无法成功推送。
- 接收方设备处理异常:即使消息成功通过TCP连接发送到接收方设备,但如果接收方设备在处理过程中出现异常,可能导致消息丢失。
解决方案:业务层ACK机制
为了解决消息丢失的问题,即时消息系统通常会采用业务层ACK机制。这种机制类似于TCP协议中的ACK机制,通过确认消息的方式来确保消息的可靠投递。
具体实现如下:
- IM服务器在推送消息时,会携带一个标识符SID(类似于TCP的sequenceId),并将消息添加到"待ACK消息列表"。
- 接收方设备成功接收到消息后,会向IM服务器发送一个业务层的ACK包,其中包含接收到消息的SID。
- IM服务器接收到ACK包后,会从"待ACK消息列表"中删除对应的消息记录,表示该条消息已经成功送达。
ACK机制中的消息重传
即使采用了ACK机制,仍然可能出现消息丢失的情况。为了解决这个问题,即时消息系统通常会参考TCP协议的重传机制。
具体策略如下:
- IM服务器会维护一个"等待ACK队列",用于存储已发送但未收到ACK确认的消息。
- 如果消息在推送过程中丢失,比如接收方设备不可达或者网络中间设备丢包等情况,IM服务器会根据一定的策略进行消息的重传,直到收到ACK确认为止。
通过以上的ACK机制和消息重传策略,即时消息系统能够较好地保证消息的可靠投递。
Learn more:
- 04 | ACK机制:如何保证消息的可靠投递? - 极客时间已完结课程限时免费阅读
- 【精选】保证消息的可靠投递--即时消息 ACK机制_websocket ack-CSDN博客
- 《即时消息技术剖析与实战》学习笔记4--IM系统如何保证消息的可靠性 - 鹿呦呦 - 博客园
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA
许可协议。转载请注明出处!