目前IM有四种协议:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通信和空间平衡扩充的进程开始协议SIP(SIMPLE)以及XMPP。PRIM与XMPP、 SIMPLE相似,但已经再也不使用了。 html
在这四种协议中,XMPP是最灵活的。XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。所以,基于XMPP的应用具备超强的可扩展性。通过扩展之后的XMPP能够经过发送扩展的信息来处理用户的需求,以及在XMPP的顶端创建如内容发布系统和基于地址的服务等应用程序。并且,XMPP包含了针对服务器端的软件协议,使之能与另外一个进行通话,这使得开发者更容易创建客户应用程序或给一个配好系统添加功能。 java
采用XMPP协议的即时通讯应用,当数google吧,Google Talk是基于XMPP协议,并且它还容许其它IM自由使用XMPP协议。如此一来,任何IM供应商在遵循XMPP协议的前提下,均可以随时与Google Talk实现免费链接. 编程
XMPP的前身是Jabber,一个开源形式组织产生的网络即时通讯协议。XMPP目前被IETF国际标准组织完成了标准化工做。标准化的核心结果分为两部分:核心的XML流传输协议、基于XML流传输的即时通信扩展应用 安全
XMPP的核心XML流传输协议的定义使得XMPP可以在一个比以往网络通讯协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议可以很是漂亮。 服务器
XMPP的即时通信扩展应用部分是根据IETF在这以前对即时通信的一个抽象定义的,与其余业已获得普遍使用的即时通信协议,诸如AIM,QQ等有功能完整,完善等先进性。 网络
XMPP中定义了三个角色,客户端,服务器,网关。通讯可以在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,链接管理和信息的路由功能。网关承担着与异构即时通讯系统的互联互通,异构系统能够包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端经过TCP/IP链接到单服务器,而后在之上传输XML。 架构
传输的是与即时通信相关的指令。在之前这些命令要么用2进制的形式发送(好比QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(好比MSN)。而 XMPP传输的即时通信指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而 XMPP的核心部分就是一个在网络上分片段发送XML的流协议。这个流协议是XMPP的即时通信指令的传递基础,也是一个很是重要的能够被进一步利用的网络基础协议。因此能够说,XMPP用TCP传的是XML流。 并发
开放—XMPP协议是自由、开放、公开的,而且易于了解。并且在客户端、服务器、组件、源码库等方面,都已经各自有多种实现。 分布式
标准—互联网工程工做小组(IETF)已经将Jabber的核心XML流协议以XMPP之名,正式列为承认的实时通讯及Presence技术。而XMPP的技术规格已被定义在RFC 3920及RFC 3921。任何IM供应商在遵循XMPP协议下,均可与Google Talk实现链接。 工具
证明可用—第一个Jabber(如今XMPP)技术是Jeremie Miller在1998年开发的,如今已经至关稳定;数以百计的开发者为XMPP技术而努力。今日的互联网上有数以万计的XMPP服务器运做著,并有数以百万计的人们使用XMPP实时传讯软件。
分布式—XMPP网络的架构和电子邮件十分相像;XMPP核心协议通讯方式是先建立一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人均可以运行本身的XMPP服务器,使我的及组织可以掌控他们的实时传讯体验。
安全—任何XMPP协议的服务器能够独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已自带于核心XMPP技术规格中。
可扩展—XML命名空间的威力可以使任何人在核心协议的基础上建造客制化的功能;为了维持通透性,常见的扩展由XMPP Standards Foundation。
弹性佳—XMPP除了可用在实时通讯的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
多样性—用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各类领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。
数据负载过重:随着一般超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。
没有二进制数据:XMPP协议的方式被编码为一个单一的长的XML文件,所以没法提供修改二进制数据。所以,文件传输协议同样使用外部的HTTP。若是不可避免,XMPP协议还提供了带编码的文件传输的全部数据使用的Base64。至于其余二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。
vCard是一种现存的、普遍使用的,用户我的信息存储的标准,有点像是电子名片。基础的功能是存储和获取用户的电子身份,该信息是用XML表示的,数据的存储取决于全部现存的Jabber服务器的实现。
客户机/服务器通讯模式、分布式网络、简单的客户端、XML的数据格式。
虽然如今即时通讯软件有不少,可是它们之间不能互联互通也阻碍了及时通讯用户的继续扩展。所以,在现阶段的各类即便通讯服务,没有统一的标准,没法实现互联互通的局面下,而XMPP(Extensible Message and presence Protocol)协议的出现,实现了整个及时通讯服务协议的互通。有了这个协议以后,使用任何一个组织或者我的提供的即便通讯服务,都可以无障碍的与其余的及时通讯服务的用户进行交流。例如google 公司2005年推出的Google talk就是一款基于XMPP协议的即便通讯软件。
该协议的前身是Jabber,咱们采起XMPP协议主来实现IM主要是考虑XMPP协议是以XML为基础的,它继承了在XML环境中灵活的发展性。这代表XMPP是可扩展的,因此XMPP信息不只能够是简单的文本,并且能够携带复杂的数据和各类格式的文件,也就是说XMPP协议不只能够用在人与人之间的交流,并且能够实现软件与软件或软件与人之间的交流,目前支持XMPP协议的即时通信工具备Gtalk、FaceBook IM、Twitter、网易POPO等等通信工具,具备很是好的发展情景。
XMPP的基础部分已经在2002-2004年获得了互联网工程任务组(IETF)的批准,这意味着XMPP在未来就像咱们认为理所固然的Internet协议TCP/IP、HTTP、FTP、SMTP、POP同样成为Internet标准;这意味着之后咱们就像使用Web、使用Email和使用FTP同样开放地使用IM。甚至若干年后人们会理所固然地认为163的邮箱能够给Hotmail发邮件同样,QQ用户也能够添加Gtalk用户,人们会逐渐忘却当年军阀割据纷乱的历史。这是一种革命性的进步!不支持XMPP的IM将会像IBM的 Token-Ring同样孤芳自赏或者像DEC NET协议同样被人遗忘。遥想当年DEC NET和IBM Token-Ring也是多么意气风发羽扇纶巾啊!
IMPP:IMPP主要定义必要的协议和数据格式,用来构建一个具备空间接收、发布能力的即时信息系统。到目前为止,这个组织已经出版了三个草案RFC,但主要的有两个:一个是针对站点空间和即时通信模型的(RFC 2778);另外一个是针对即时通信/空间协议需求条件的(RFC2779)。RFC2778是一个资料性质的草案,定义了全部presence和IM服务的原理。RFC2779定义了IMPP的最小需求条件。另外,这个草案还就presence服务定义了一些条款,如运行的命令、信息的格式,以及 presence服务器如何把presence的状态变化通知给客户。
SIMPLE:SIMPLE是目前为止制定的较为完善的一个。SIMPLE和XMPP两个协议,都符合RFC2778和RFC2779 。SIMPLE计划利用SIP来发送presence信息。SIP是IETF中为终端制定的协议。SIP通常考虑用在创建语音通话中,一旦链接之后,依靠如实时协议(RTP)来进行实际上的语音发送。但SIP不只仅能被用在语音中,也能够用于视频。SIMPLE被定义为创建一个IM进程的方法。 SIMPLE在2002年夏季获得额外的信任,目前,微软和IBM都致力于在它们的即时通信系统中实现这个协议。 SIMPLE小组致力于进程模式的操做,这将提高运行效率,使基于SIP的机制可以进行会议和三方电话交谈控制,也考虑到能和将来提供的许多新特性实现兼容并提高表现能力。有了进程模式,SIMPLE使用SIP来创建一次进程,再利用SDP(进程描述协议)来实际传输IM数据。
Openfire 采用Java开发,开源的实时协做(RTC)服务器基于XMPP(Jabber)协议。您可使用它轻易的构建高效率的即时通讯服务器. Openfire安装和使用都很是简单,并利用Web进行管理。单台服务器可支持上万并发用户。因为是采用开放的XMPP协议,您可使用各类支持XMPP协议的IM客户端软件登录服务.
A、Openfire为Java开源项目
B、采用开放的XMPP协议
C、 有多种针对不通系统的版本
D、使用Socket通信
E、 单台服务器可支持上万并发用户,搭建分布式云服务器可轻松提供大量并发用户。
F、 Socket长链接
G、服务器稳定小
H、提供接口,可本身开发插件
Smack是一个开源,易于使用的XMPP(jabber)客户端类库。Smack API, 是一个 Java 的XMPP Client Library,也是由Jive Software开发。 优势:编程简单。 缺点:API并不是为大量并发用户设计,每一个客户要1个线程,占用资源大,1台机器只能模拟有限(数千个)客户.smack是一个用 java 写的XMPP客户端代码库, 是 spark 的核心.
A: Smack是一个简单的,功能强大的类库。给用户发送信息只需三行代码即可完成。
B: 不会强迫你向其余类库那样,在信息包层面进行编码。它提供了更加智能化的类好比Chat和Groups,能使你的工做更富效率。
C: 不须要你熟悉XMPP XML格式,甚至是XML格式。
D: 易于实现机-机对话。
E: Apace License下的开源软件。你能够把它用于你的商业或非商业应用程序。
开源界老是有许多有趣的东东,这三个合起来就是一个完整的XMPP IM 实现。包括服务器端——Openfire,,XMPP 传输协议的实现——Smack(记住,XMPP是一个协议,协议是须要实现的,Smack起到的就是这样的一个做用)。三者都是基于Java 语言的实现。
Spark 提供了客户端一个基本的实现,并提出了一个很好的插件架构,这对于开发者来讲不能不说是一个福音。我强烈建议基于插件方式来实现你新增长的功能,而不是去改它的源代码,这样有利于你项目架构,把原始项目的影响降到最低。
Openfire 是基于XMPP 协议的IM 的服务器端的一个实现,虽然当两个用户链接后,能够经过点对点的方式来发送消息,可是用户仍是须要链接到服务器来获取一些链接信息和通讯信息的,因此服务器端是必需要实现的。Openfire 也提供了一些基本功能,但真的很基本的!庆幸的是,它也提供插件的扩展,像Spark 同样,一样强烈建议使用插件扩展的方式来增长新的功能,而不是修改人家的源代码。
Smack 是一个XMPP 协议的Java 实现,提供一套可扩展的API,不过有些时候,你仍是不得不使用本身定制发送的XML 文件内容的方式来实现本身的功能
下图展现了三者之间的关系:
http://www.vsharing.com/k/KM/2010-9/637014.html
http://www.cnblogs.com/luxiaofeng54/archive/2011/03/14/1984026.html
http://blog.csdn.net/shimiso/article/details/8816558