XMPP简介

历史

Jeremie Miller1998年开始了这个项目。第一个公开版本于2000年5月发行。这个项目的主要产品是jabberd,XMPP的服务器端软件。它既可以创建私人的XMPP网络,也可以加入全球的公共XMPP网络。XMPP的关键特色是,分散式的实时通信系统,以及使用XML流。

Jabber Logo

Jabber已经由IETF XMPP协议(RFC3920)标准化。

Jabber是一个开放源代码形式组织产生的网络实时通信协议。XMPP原本是为即时通讯而量身定制,但由于XML Stanza本身是XML元素,在基于XML灵活发展的特性下,使得XMPP也可以适用其他方面,已经得到了IETF的批准。XMPP与IMPPPRIMSIPSIMPLE)合称四大IM协议主流,在此4大协议中,XMPP是最灵活的。

2005年Google发布了Google Talk,这是一个IP电话及实时通信的服务,即时通讯功能采用了开放的XMPP。预计这将对XMPP社区起很大的推动作用。初期此服务不支持服务器到服务器的通讯功能,所以未能完全发挥XMPP的分散式特色;虽然任何XMPP客户端都能连接到Google Talk,但是用户若欲登录Google Talk,必须拥有Google Talk帐号(即Gmail帐号),而用户也无法与公共XMPP网络的用户对谈。自2006年1月17日起,服务器到服务器的通信激活了,Google Talk用户可与其他XMPP公共网络的用户对谈。

2007年,2001年成立的Jabber软件基金会更名为XMPP标准基金会[2]

特色

优点

开放—XMPP协议是自由、开放、公开的,并且易于了解。而且在客户端服务器组件源码库等方面,都已经各自有多种实现。

标准—互联网工程工作小组(IETF)已经将Jabber的核心XML流协定以XMPP之名,正式列为认可的实时通信及Presence技术。而XMPP的技术规格已被定义在RFC 3920RFC 3921。任何IM供应商在遵循XMPP协议下,都可与Google Talk实现连接。

证实可用—第一个Jabber(现在XMPP)技术是Jeremie Miller在1998年开发的,现在已经相当稳定;数以百计的开发者为XMPP技术而努力。今日的互联网上有数以万计的XMPP服务器运作著,并有数以百万计的人们使用XMPP实时传讯软件。

分散式—XMPP网络的架构和电子邮件十分相像;XMPP核心协议通信方式是先创建一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的实时传讯体验。

安全—任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASLTLS等技术的可靠安全性,已自带于核心XMPP技术规格中。

可扩展—XML命名空间的威力可使任何人在核心协定的基础上建造定制化的功能;为了维持通透性,常见的扩展由XMPP Standards Foundation

弹性佳—XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。

多样性—用XMPP协定来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各种领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。

缺点

  • 数据负载太重:随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。
  • 没有二进制数据:XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。因此, 文件传输协议一样使用外部的HTTP。如果不可避免,XMPP协议还提供了带编码的文件传输的所有数据使用的Base64。至于其他二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。

运作方式

XMPP网络是基于服务器的(即客户端之间彼此不直接交谈),但是也是分散式的。不像AOL实时通或MSN Messenger等服务,XMPP没有中央官方服务器。Jabber.org的公众服务器上有大量的用户,所以有些人误解了,以为它是官方服务器,不过事实上任何人都可以在自己的网域上运行XMPP服务器。

Jabber识别符(JID)是用户登录时所使用的帐号,看起来通常像一个电子邮件地址,如someone@example.com;前半部分为用户名,后半部分为XMPP服务器域名,两个字段以@符号区隔。

假设朱丽叶(juliet@capulet.com)想和罗密欧(romeo@montague.net)通话,他们两人的帐号分别在Capulet.com及Montague.net的服务器上。当朱丽叶输入信息并按下传送钮之后,一连串的事件就发生了:

  1. 朱丽叶的XMPP客户端将她的信息传送到Capulet.com XMPP服务器。
  2. Capulet.com XMPP服务器打开与Montague.net XMPP服务器的连接。
  3. Montague.net XMPP服务器将信息寄送给罗密欧。如果他目前不在联机,那么存储信息以待稍后寄送。
Juliet
\leftrightarrow
Capulet.com
\leftrightarrow
Montague.net
\leftrightarrow
Romeo

罗密欧与朱丽叶两人的XMPP服务是由两家不同的业者所提供的,而他们彼此传讯时,不须拥有对方服务器的帐号,也不须成为对方业者的会员。

与其他协议互联

各IM之间的互传

XMPP协议的另一功能是运输(transports),也被称为网关(gateways),可允许用户通过网络使用其它协议。这可以是其他的实时通信协议,也可以是不同协议,如短信(SMS)或电子邮件。

XMPP协议通过HTTP运输

在原来的规格,XMPP协议可以使用HTTP的方式有两种:轮询(polling)[3]与绑定(binding)[4]。 轮询现在不推荐,基本上,轮询意味着HTTP邮件存储在服务器端的数据库上,客户端必须一再地以HTTP的GET和POST的方式去抓取(以及刊出)其中 的信息。然而使用绑定的方式时,客户端会保留一个长存的HTTP连接,等待一旦服务器有新的信息时,就立刻接收信息。因为轮询的结果往往是服务端没有新信 息,这种推送的通知模式比轮询的方式更有效率。

由于客户端使用HTTP,大多数防火墙允许客户端获取和留言没有任何障碍。因此,即使使用XMPP协议的TCP端口被拦截,服务器也能正常地倾听一 般的HTTP端口,其上的信息也能保持畅通。还有一些网站更允许大众经由浏览器登录进XMPP。尤有甚者,还有一些公共的服务器同时拥有标准 HTTP(80端口)和HTTPS(443端口),因此又有助于通过防火墙。

实现

XMPP客户端软件

单一协议XMPP客户端

开放源代码软件

名称平台说明
Bombus Java MEMIDP2.0)/WinCE  
Bombusmod Java MEMIDP2.0 Bombus的分支. 具有反垃圾邮件功能。
cabber 跨平台 过时[2]
Coccinella 跨平台 TclTk
Exodus Windows  
Freetalk LinuxUnix [3] 纯文字接口
Gabber LinuxUnix GTK+,2004年后停止支援
Gajim 跨平台 PyGTK
GOIM 跨平台 Eclipse RCP,源自游戏玩家。
Gossip LinuxUnix GTK+
iJab 跨平台 网页应用程序
IMCom 跨平台 [4]
Iruka 跨平台 过时[5]
jabber.el Emacs Lisp [6]
JabberFoX Mac OS X 过时[7]
JabberMixClient Java MEMIDP2.0 http://jabbermixclient.sourceforge.net/
JabberMixLocation Java MEMIDP2.0 JabberMixClient + 地理定位特征
Jabberzilla 跨平台 http://jabberzilla.jabberstudio.org/
Jabber WindowGram Client 跨平台 http://jwgc.blathersource.org/
Jabbim 跨平台 PyQt,消息格式为(XHTML-IM)
Jabbin 跨平台 Qt。衍生于PSI,含VoIP功能(通过Jingle提供)
JBother Java http://jbother.org/
JeCat-Jabber PHP/Windows/Linux http://jj.jecat.cn/
Jeti Java  
Jeti/2 Java/eComStationOS/2 http://www.ehlertronic.de/jeti2.htm
JWChat 跨平台 网页应用程式
Lampiro Java MeMIDP 2.0 [8]
MCabber 跨平台 Cabber的分支, 命令行客户端(ncurses
Mobber Java MEMIDP1.0  
moJab J2ME/MIDP [9]
MOO-XMPP MOO 作为MOO物件运行
nebohodimo Windows Mobile MS.Net Compact Framework 2 SP2
Psi 跨平台 Qt
sjabber 跨平台 过时[10]
Spark 跨平台 Java
Synapse LinuxUnix MonoQyoto (Qt .NET 绑扎) [11]
Tapioca    
Talkonaut Symbian S60, Windows Mobile 5/6, J2ME GTalk2VoIP功能
Tkabber 跨平台 TclTk
Whisper IM Java [12]
wija Java  

专有的免费软件

名称平台附注
Chikka Messenger Windows、Android、iOS 官网
Colibry IM J2ME/MIDP [13]
GCN Windows  
Google Talk WindowsAndroid 仅支持Gmail托管下帐号登入
Gush 跨平台 停产
JAJC Windows  
Joost Windows  
mjabber Java MEMIDP2.0  
Pandion Windows 停产
网易泡泡 Microsoft Windows 仅支持网易托管下帐号登入
TipicIM Windows [14]
TransVerse[15] 跨平台 Java 5.0+

商业软件

名称平台附注
Akeni Jabber Client 跨平台 http://www.akeni.com
BellSouth Messenger Windows 南方贝尔顾客适用[16]
Chatterbox Web-JavaScript及Windows [17]
Chatopus PalmOS 支持Palm OS 4.0 或Palm OS 5[18]
Jabber Messenger Windows [19]
Neos Windows [20]
TipicME J2ME-PersonalJava [21]
TipicWeb Java Applet [22]
TSIM Windows [23]

多通讯协议客户端

开放源代码

名称平台说明
Adium Mac OS X Cocoa,支援于 libpurple
Ayttm 跨平台 GTK+ayttm.sourceforge.net 功能很阳春
BitlBee 跨平台 是IRC server,可透过它转送讯息给其他使用者Jabber,ICQ,AIM,MSN,Yahoo message 参考资料
CenterIM 跨平台 纯文字接口,CenterICQ的后继者
Colloquy Mac OS X 仅实验性质
climm 跨平台 CLI-based, just core XMPP functions yet
Empathy 跨平台 Telepathy-基底
Fama IM LinuxUnix ncurses
Fire Mac OS X 已不再更新,使用者应换成 Adium
Instantbird 跨平台 基于XUL、Mozilla渲染引擎和Pidgin协议接口
Kopete LinuxUnix 支援度有限
Miranda IM Windows Win32的C++发行版内置Jabber协议插件。
QuteCom 跨平台  
qutIM 跨平台 C++QT 4.4, 反垃圾邮件技术,标签和窗口的消息模式,支持代理,支持插件
Pidgin 跨平台 GTK+,支援于 libpurple,但不完整。聊天室功能不完整。
SIM 跨平台 QtKDE 是一个选择)
SIP Communicator 跨平台 Java。还在开发中。
Wippien WindowsLinuxUnix 支援VPN点对点

专有的免费软件

名称平台说明
AQQ Windows 官网 支援Gadu-GaduTlen 的一部份 AIMICQMSN
Digsby Windows 即时通信、电子邮件和社交网络的易用集成
Gizmo5 跨平台 VoIP
iChat Mac OS X v10.4及以上 除了XMPP以外,还支持AOL即时通讯(含ICQ.Mac和后来的MobileMe)、Bonjour两种协议。
Konnekt Windows 支援 Gadu-GaduTlen 及其他,但要透过插件。停产。
Meebo AndroidiOS
Mercury Messenger 跨平台 透过XMPP网关,实为.NET Messenger Service客户端。
Nimbuzz Microsoft WindowsMac OS XJava MEAndroidBlackBerry OSiOSS60Windows Mobile IP电话方面支持会话发起协议,在聊天方面支持XMPP(含Google TalkFacebook)、SkypeWindows Live MessengerYahoo! MessengerAOL即时通讯ICQ协议。
Proteus Mac OS X libpurple部分开源[24]
QIP WindowsS60Windows Mobile
Sapo Messenger WindowsMac 其延伸的特点含VoIP
Slick Windows MobileSymbian Beta
Trillian Windows 4.0版之前的XMPP协议需插件支持(付费),4.0版始免费提供,均需要注册Trillian帐号
Vbuzzer Messenger Windows 2000XPVista 用于VoIPSIPRSSFaxXMPP 在聊天(chat)方面,多协议即时通信支援 MSN雅虎通AIM 以及 ICQ协议

参见

XMPP服务器端软件

使用XMPP协议的客户端与服务器端对话的例子

客户端(kuusipuu)连接到一个XMPP服务器(amessage.de:5222/TCP),发送一条消息(主题和内容均为“test 1449”)到另一个客户端(tero),然后注销。

kuusipuu:

<?xml version="1.0"?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client" to="amessage.de">

amessage.de:

<stream:stream xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
from='amessage.de' id='1461777714'>

kuusipuu:

<iq type="set" id="auth_2" to="amessage.de" >
<query xmlns="jabber:iq:auth">
  <username>kuusipuu</username>
  <password>mypassword</password>
  <resource>Work</resource>
 </query>
</iq>

amessage.de:

<iq from="amessage.de" id='auth_2' type='result'/>

kuusipuu:

<message to="tero@example.com" >
<subject>test 1449</subject>
<body>test 1449</body>
</message>
<presence type="unavailable" >
<status>Logged out</status>
</presence>
</stream:stream>

amessage.de:

</stream:stream>

posted on 2013-04-18 17:49  CVT-wangxin  阅读(1200)  评论(0编辑  收藏  举报

导航