开源IM项目OpenIM第二版对于客户端架构进行了局部重构,解决了消息触发时序等bug,也梳理了内部模块。目前已经接近尾声,本文重点讲解SDK架构,以便大家深入了解OpenIM,并希望大家能深度参与开发。很多开发者有个误区,认为IM的挑战主要在服务端,当然服务端有其挑战,包括性能、压力、时延等,但优秀的IM架构需要服务端和客户端完美配合,比如消息对齐机制,本地缓存和后台数据同步,app多端如何实时同步。
github 6.5K star 具体地址:
OpenIM Corporation
github.com/OpenIMSDK
客户端重点问题总结:
(1)如何确保消息有序性;
(2)如何确保消息百分百可达;
(2)如果确保本地db和服务端数据的一致性;
(3)如何高效地实现多端同步;
(4)如果确保消息即时达到;
(5)消息发送的异步性,如何确保消息发送的一致性;
本文从架构角度重点解答第1,2两个问题
客户端模块划分和协程模型

WsConn:ws连接管理器。提供函数供其他方调用,具体包括:
(1)ws连接服务端,和OpenIM服务端保持长连接;
(2)关闭ws连接;
(3)通过ws发送请求;
WsRespAsyn:ws请求-响应同步器,因为ws是异步处理,需要把请求和响应关联起来,提供函数供其他方调用(消息发送,心跳发送,拉取历史消息等)
(1)getCh:为每个请求生成一个channel和msgIncr,使用map关联起来 msgIncr->channel
(2)notifyResp:对于ws收到的每个响应,通过msgIncr找到channel,并往channel发送响应,通知响应到达;
Ws:模块对WsC

本文详细介绍了开源IM项目OpenIM客户端的架构,特别是消息有序性和可达性保障机制。通过WsConn、WsRespAsyn和MsgSync等模块,实现了消息的同步、心跳管理和推送消息处理。当心跳或接收到push消息时,会触发消息同步,确保本地db和服务端数据一致,同时保证新消息回调的有序性。
最低0.47元/天 解锁文章
1918

被折叠的 条评论
为什么被折叠?



