
2015年5月加入去哪儿网IM团队,主要负责办公IM和客服IM的系统开发和架构设计。擅长使用Erlang语言开发高并发、高可用的应用服务。致力于可扩展的IM系统,模块化组件,使用一套服务实现办公、客服、消息推送等多种功能。
Qunar由于业务上对 IM 系统的需求,以及对 IM 需要支持的功能和扩展,结合市面上已有的 IM 的实现,实现了自己的一套完善的办公 IM 和客服 IM 系统。具备了以下几个重要特点:实时性,可靠性,一致性,安全性,扩展性,高并发。
1. IM 是什么
IM(Instant messaging)是一种通过网络提供实时消息传输的在线沟通技术。IM 系统一般包括:IM 客户端、 IM 服务器、网络以及在他们之间传输的消息。
整个流程类似于我们寄送包裹:用户A(客户端)将写有发件人和收件人的包裹(消息)给到邮局(服务器),邮局(服务器)根据包裹(消息)上收件人的信息,将包裹(消息)发送给用户B(客户端),完成整个消息的传输。
大家常见的 IM 实现:
2. IM 常见实现方案
XMPP 协议
XMPP 是一个开放式的 XML 协议,设计用于准实时消息和出席信息以及请求-响应服务。
XMPP 协议单元包括三个大类:
Presence:Presence 决定了 XMPP 实体的状态,用来告诉服务器该实体是在线、离线或者繁忙;
Message:用户之间发送和接收的消息;
IQ:请求-响应类型的报文;
优点:XMPP 有大量的优秀实现,且社区环境良好,功能和扩展能力丰富。
缺点:报文较大,耗费网络流量和电量。
MQTT 协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于 TCP/IP 协议上,由 IBM 在1999年发布。MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT 是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT 协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。正是由于它的简单,也带来了他的缺点:需要自己去实现聊天,好友等IM的逻辑。
3. Qunar 实现
协议的选择
基于上面调研的常用 IM 协议,我们最终选择了 XMPP 协议最为最开始的实现协议:
因为可以用最小的开发工作来实现基本的聊天功能;
可以使用已有的扩展插件,更快实现更多的功能;
针对 XMPP 的缺点,做针对性的修改,将网络传输这一阶段,改成 protocol bu