XMPPExtensible Messaging and Presence Protocol,前称Jabber[1])是一种以XML为基础的开放式实时通信协议,是经由互联网工程工作小组(IETF)通过的互联网标准。XMPP因为被Google Talk应用而被广大网民所接触。

 

运作方式

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

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

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

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

Juliet\leftrightarrowCapulet.com\leftrightarrowMontague.net\leftrightarrowRomeo

 

罗密欧与朱丽叶两人的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>kuusipuuusername>
  <password>mypasswordpassword>
  <resource>Workresource>
 query>
iq>

amessage.de:

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

kuusipuu:

<message to="[email protected]" >
<subject>test 1449subject>
<body>test 1449body>
message>
<presence type="unavailable" >
<status>Logged outstatus>
presence>
stream:stream>

amessage.de:

stream:stream>

 

参考:http://zh.wikipedia.org/wiki/XMPP