了解完需求,开始做方案设计,最开始面临的选择之一,需要使用什么样的基础协议。IM系统也是一样,市面上可以被用来开发IM通讯系统的协议还是比较多。这里我先一一列举下:
SIP:
用来帮助提供跨越因特网的电话业务,一般网络电话业务会选择该协议完成业务。协议定义了发起呼叫,对方振铃,开始接听,会话建立等诸多流程,而且还非常成熟。会话建立完成后,就可以走数据通讯了,可以用它来完成单聊多人聊天业务。
优点:用来做会话内聊天,视频通话,语音通话业务还是一个不错的选择。一款标准化的协议,支持该协议的开源工具将会很多。
缺点:如果只是用来做单聊,多人聊天类似的业务的话,因为大量的交互冗余,将有过多的流量消耗,移动端APP对于流量和耗电量的损耗是特别看重的。
私有RPC:
一般采用TCP协议,高层的协议需要自己定义,包括公用的协议头部分和数据部分,
优点:是能根据业务场景进行协议定制,做到节省流量,减少交互次数。
缺点:如果定义者经验不够的话,协议局限性比较强,到后期极有可能制约业务需求发展。协议相关的SERVER端CLIENT端协议栈需要自己开发,这块需要投入大量的人物力。
XMPP:
XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
优点:业界使用很广的协议,有大量的开源实现,能帮助快速的开发高质量的应用。
缺点:这个协议因为是基于XML的,所以对于流量损耗和网络带宽的要求还是比较高,所以他一直被用于PC电脑的上IM应用上面。
SYMCML:
一个简单、通用的可以用于工业界方面的数据同步协议。使用了该款协议的有FOXMAIL,
优点:对于多设备同时使用,能给与很好的支持。
缺点:协议本身就比较复杂,交互流程比较多,用户流量消耗比较大。不过基于该协议思想改进后的效果还是很好的,如WECHAT,FOXMAIL
MQTT:
IBM提出一种轻量级的,适合于低带宽、不可靠连接、嵌入式设备、CPU、内存资源紧张,适用于各种受限的环境的传输协议。最早使用于心脏起搏器的质量状态监控上。
优点:
有明确定义服务质量,对于不同的质量有不同交互流程要求。
包体流量占用小,对于每个字节都有精确的定义。
有大量的开源实现,能帮助快速的开发高质量的应用。
缺点:
协议本身不是基于IM业务设计的,一款基于二进制的协议,对于字节定义缺乏可扩展性,有时需要你在产品需求和标准协议实现上做出一些权衡。
比如:publish应答不能带payload,如果想通过应答获得该条消息的系统时间,得想其他的办法。
总结:
对于开发一款基于IM为基础通讯的APP,没有一层不变的选择,我们只有根据产品需求,项目时间要求,去选择一款最合适的协议来开发我们的应用。