XMPP(Extensible 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的服務器上。當朱麗葉輸入信息並按下傳送鈕之後,一連串的事件就發生了:
- 朱麗葉的XMPP客戶端將她的信息傳送到Capulet.com XMPP服務器。
- Capulet.com XMPP服務器打開與Montague.net XMPP服務器的連接。
- Montague.net XMPP服務器將信息寄送給羅密歐。如果他目前不在在線,那麼存儲信息以待稍後寄送。
JulietCapulet.comMontague.netRomeo
羅密歐與朱麗葉兩人的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="[email protected]" > <subject>test 1449</subject> <body>test 1449</body> </message> <presence type="unavailable" > <status>Logged out</status> </presence> </stream:stream>
amessage.de:
</stream:stream>