目前即时通讯主要有四种协议:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通信和空间平衡扩充的进程开始协议SIP(SIMPLE)以及XMPP。到目前,主流的主要是XMPP和SIP/SIMPLE。安全
SIMPLE利用SIP来发送presence信息。SIP是IETF中为终端制定的协议。要谈SIMPLE,首先要谈谈SIP,在传统的电路交换向分组交换演进的过程当中,SIP起到了很关键的做用,IMS中的核心协议就是SIP,并已SIP做为中介来实现PSTN,VOIP,移动网络的融合。因此从强调开放性的Internet网络和强调垄断性的电信网络两个网络属性来看的话,SIP其实更倾向于后者。SIP包含着完善的网络互通设计,因此是VOIP的首选。若是你的即时通讯软件还想与传统的电话网络互连的话,SIP应该是首选。SIP经过SDP来描述媒体流,并经过信令交换主被叫的媒体流信息,例如IP地址和端口,再依靠如实时协议(RTP)来进行实际上的媒体链接。这个媒体链接不单单包括语音,也包括视频等数据流。因此SIP的即时通讯会话是点对点的,但信令流是依据网络配置逐级路由传递的。并且网络延伸的范围包括PC网络客户端,PSTN的传统电话,移动终端,VOIP模拟电话终端,VOIP的小交网络,接入网等等,无所不到。要支持这么多网络,协议的互连互通,因此关于SIP的相关扩展就可想而知,这其中还要包括网管,计费等功能的协调与支持,因此SIP的电信网络属性应该更重一些。SIMPLE是SIP为了支持即时通讯的新特色作出的扩展,实际上是向Internet网络的回归。服务器
若是咱们选择SIP做为即时通讯的实现方向的话,应该说没有问题,正所谓条条大路通罗马,只要通讯质量好,网络负载轻,系统安全,业务功能齐全,其实不在意用什么技术。但前提是你实力足够强,技术足够牛。若是是对于搞新产品的小公司来讲,若是你不是要去搞VOIP,选择SIP,比较容易走上封闭的羊肠小道。虽然你实现了即时通讯的业务功能,但你吸引新用户的能力有限,在如今日益强调网络社交属性的今天,很难想象你能吸引多少用户去安装一个新的即时通讯的客户端,用户通常只会用他们经常使用的MSN,QQ,Skype等等,对于新的即时通讯客户端,他们已经装到反胃了。网络
但若是你实力足够强,这也不是绝对的,MSN也是基于SIP的,随着即时通讯的功能日益扩展,私有的协议在不断扩展,你把你的私有协议开放出来,你也会有追随者帮你写XMPP的网关适配模块,借助XMPP与其它IM进行互联互通。但对新起步的公司来讲,好像不是那么容易,那就得本身动手写,把本身适配到XMPP的网络中去。可前提是用多少其它客户端用户对你的系统感兴趣,而且在他们的客户端中安装你的应用的插件。ide
因此从这个角度来讲,不如直接选择XMPP,由于大多数IM客户端不在意与传统电信网络的融合,像SKype那样提供与PSTN的网络接入。大多数只是纯的Internet应用,直接实现点到点的语音、视频和数据链接。基于XMPP的实现,经过加入主流的IM插件,能够将主流IM的用户资源引入到你的IM应用中,借助网络社交进行推荐,能更快的吸引新用户,以及他们的好友加入进来。酒好也怕巷子深,因此得借助XMPP,把酒传销出去。至于你们愿不肯意经过你的IM客户端登录其它主流IM,那就看你设计的功夫了,既要让用户接纳你,还不要让他们感受到拉远了与他们熟悉的IM间的距离。要双赢。插件
过去你们总以为XMPP在点对点的媒体流互通支持上还不行,若是经过带内传输媒体信息的话,经过服务器一级级中继传输,那网路开销可想而知,这还不包括时间上的延迟。其实不少应用都已经支持了点对点的互通,像Libjingle。SIP也就是经过交换主被叫信息直接进行点对点通讯的,XMPP固然也能够,并且考虑到XML的强大的灵活的扩展功能,搞定任何网络应用都不成问题,因此对于新功能新需求的实现,不成问题,不过最好看看XMPP的新的扩展规范,没准别人已经实现了,照着规范来,也好实现你们的互连互通。若是为快速实现功能,固然能够本身定制本身的私有协议,没准还能写到RFC里呢。设计
本文只是提供IM通讯技术选择的一些思路,从个人理解,若是本身要实现一个新的IM应用,选择XMPP应该更合适一些。这固然也有本身理解上的误区,欢迎讨论和拍砖。视频