1.1 前言
随着移动互联网的日益发展,对APP功能的要求越来越高,以往仅仅是展示类型的APP将越来越不能满足客户的要求,APP市场会越来越向高层次、重量级应用发展,而IM是这些APP所需要具备的功能之一。
手机由于极强的移动与便捷性,使用通讯会变得前所未有的便捷,虽然通过微信、qq、微博等工具也能实现相互之间的沟通功能,但是这些毕竟是面向公众的应用,很多客户都需要将自己的客户组织起来,实现他们与他们的客户、以及他们客户彼此之间的类似微信类通讯的功能,一是要保证通讯较为封闭,二是实现必要的管理。
1.2 目前市场上有什么选择
抛开闭源的专业软件,开源的IM协议有XMPP和MQTT两大类,XMPP是基于XML格式的IM传输协议,目前已经得到了极为广阔的应用,比较有名的开源实现为Openfire,已经有很多公司使用。另外一大类型为MQTT,目前这方面的成熟开源软件实现还比较少,大规模应用的也还不多,而且由于天生的设计原因,需要做大量扩展之后才能实现现阶段的需求。
如果不介意数据的安全性,开发者也可以选择基于云服务的消息中间件,如融云、环信等公司提供的基于公有云的解决方案。
1.3 为什么不选择XMPP及Openfire
Openfire是目前使用得最多的开源IM聊天软件,实现相对比较成熟,但是在手机使用时有几个比较大的缺陷:
1.3.1 XML在移动端的不足
由于XML协议在传输过程中有很多冗余信息,导致流量的巨大浪费,同时也导致了耗电量的巨增。如果把协议改成二进制,将会大规模节省流量和电池消耗。
1.3.2 Openfire的不足
A、 体积过大,改造成本高,Openfire为了高度兼容性和各行各业的扩展性,现在的代码量很庞大,不易进行深度改造。
B、 可靠性不高,Openfire本身就有莫明奇妙丢消息的现象。
C、 性能不高,目前通过我们的优化,每台服务器的容量不到一万用户,而且网上的评论最高也就到3~5万条,显然不能满足客户的需求。
D、 集群功能缺失,Openfire的集群功能性能损耗非常严重,一般不适宜做集群配置。