【原创】开源OpenIM:轻量、高效、实时、可靠、低成本的消息模型
1、内容概述
一套完整IM系统中,除开基本的业务设计,消息模型的设计是其中最为关键的一环,它关系到整个IM系统的可靠性、高效性、稳定性,因此需要设计一套合理的消息传递收发机制以承载IM的各种需求,OpenIM结合具体的业务场景,提炼出IM后端的重要接口,并经过反复推敲,验证,设计出了自己的一套通信协议OMTP,协议中每个字段尽量的减少冗余,使其精简高效、最大限度的满足现有的业务需求并能够支持业务的水平拓展,同时为了达到消息的实时可靠与高效,消息模型也经过了精心设计。
(1)消息的实时性:消息的实时性是考验IM系统的重要标准,传统的IM通过http长短轮询的方式来模拟实时消息,存在“实时性盲区”,所以OpenIM也同样使用了HTML5的Websocket技术,Websocket是真正的全双工双向通信技术,能够实现服务器主动推送消息到客户端,实现真正的实时双向通信(服务器通知客户端有信息到达,客户端随时向服务器发送新消息),一次连接,随时都可以使用,不用像轮询技术中不断使用http请求,这样降低了服务器的负载,并减少一些高频无用的请求。
(2)消息的可靠性:消息的可靠性,是指消息的不丢失,不重复,由于网络环境的各种复杂情况,包括数据在到达客户端后,数据需要进行各种解析与处理,包括写入db,存入cache,UI的各种展现等等,而且还包括客户端的各种异常情况,当项目越庞大时候,应用层出现错误的可能性会更高,都可能会造成消息的丢失,通常为了使得消息更为可靠,业务层通常采取的方案有:1、在应用层增加ACK消息,这种方案可以理解为模拟TCP的流程去保证消息的可靠性,server发送数据到达客户端后,客户端处理完毕(通常是保证数据已经存入db中)会向server发送一条ACK消息确认自己已经收到了消息,当server收到ACK消息后才确认消息已经成功交付,否则就会使用某种策略进行消息的重发;这个方案也会出现如果ACK消息发送后,server出于网络的原因没有成功收到,然后server进行了重发消息,客户端会重复的收到了这条消息,所以客户端需要进行去重处理。2、消息增

最低0.47元/天 解锁文章
2462

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



