点击这里给我发消息
咨询

IM消息同步机制全面解析

2021-02-01

即时通讯系统最基础、最重要的是消息的及时性与准确性,及时体现在送达度,准确则具体表现为不丢、不重、不乱序。

综合考虑业务场景、系统复杂度、网络流量、终端能耗等,融云精心设计了消息收发机制,并不断打磨优化,形成了现在的消息同步机制。


整体思路:

1、客户端、服务端共同配合,互相补充。

2、采用多重机制,从不同层面保障。

3、拆分上下行,分别处理。


客户端与服务端之间使用长连接,基于 RMTP 协议传输数据。

经过总结,主要用三种行为:

1、客户端主动拉取消息

主动拉取有两个触发方式:

①与 IM 服务新建立连接成功,用于获取不在线的这段时间未收到的消息。 (此处叫做获取离线消息)

②定时器触发。在客户端最后收到消息后启动定时器, 比如3-5分钟执行一次, 主要有两个目的,一个是用于防止因网络,中间设备等不确定因素引起的通知送达失败,服务端客户端状态不一致,一个是可通过本次请求,对业务层做状态机保活。

2、服务端主动-发送消息(直发消息) 在线消息发送机制之一,简单理解为服务端将消息内容直接发送给客户端,适用于消息频率较低,并且持续交互,比如二人或者群内的正常交流讨论。

3、服务端主动-发送通知(通知拉取) 在线消息发送机制之一,简单理解为服务端给客户端发送一个通知,通知包含时间戳等可作为排序索引的内容,客户端收到通知后,依据自身数据,对比通知内时间戳,发起拉取消息的流程。适用于较多消息传递。比如某人有很多大规模的群,每个群内都有很多成员正在激烈讨论。通过通知拉取机制,可以有效的减少客户端服务端网络交互次数,并且对多条消息进行打包,提升有效数据载荷。既能保证时效,又能保证性能。