XMPP協議

weixin_34015860發表於2012-01-10

XMPP(Extensible Messageing and Presence Protocol)可擴充套件訊息與存在協議,是目前主流的四種IM(即時訊息)協議之一,其它三種分別為:即時資訊和空間協議(IMPP)、空間和即時資訊協議(PRIM)、針對即時通訊和空間平衡擴充的程式開始協議SIP(SIMPLE)。
    在這四種協議中,XMPP是最靈活的。

XMPP是一種基於XML的協議,它繼承了在XML環境中靈活的發展性。因此,基於XMPP的應用具有超強的可擴充套件性。經過擴充套件以後的XMPP可以通過傳送擴充套件的資訊來處理使用者的需求,以及在XMPP的頂端建立如內容釋出系統和基於地址的服務等應用程式。而且,XMPP包含了針對伺服器端的軟體協議,使之能與另一個進行通話,這使得開發者更容易建立客戶應用程式或給一個配好系統新增功能。


1、什麼是XMPP ?
    XMPP的前身是Jabber,一個開源形式組織產生的網路即時通訊協議。XMPP目前被IETF國際標準組織完成了標準化工作。標準化的核心結果分為兩部分:
(1)核心的XML流傳輸協議
(2)基於XML流傳輸的即時通訊擴充套件應用
XMPP的核心XML流傳輸協議的定義使得XMPP能夠在一個比以往網路通訊協議更規範的平臺上,藉助於XML易於解析和閱讀的特性,使得XMPP的協議能夠非常漂亮。
XMPP的即時通訊擴充套件應用部分是根據IETF在這之前對即時通訊的一個抽象定義的,與其它業已得到廣泛使用的即時通訊協議,諸如AIM,QQ等有功能完整,完善等先進性。


2、XMPP的基本網路結構是怎樣的
    XMPP中定義了三個角色,客戶端,伺服器,閘道器。通訊能夠在這三者的任意兩個之間雙向發生。伺服器同時承擔了客戶端資訊記錄,連線管理和資訊的路由功能。閘道器承擔著與異構即時通訊系統的互聯互通,異構系統可以包括SMS(簡訊),MSN,ICQ等。基本的網路形式是單客戶端通過TCP/IP連線到單伺服器,然後在之上傳輸XML。


3、XMPP通過TCP傳輸什麼
    傳輸的是與即時通訊相關的指令。在以前這些命令要麼用二進位制的形式傳送(比如QQ),要麼用純文字指令加空格加引數加換行苻的方式傳送(比如MSN),而 XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文字。這不但使得容易解析,人也容易閱讀了,方便了開發和查錯。而 XMPP的核心部分就是一個在網路上分片斷髮送XML的流協議。這個流協議是XMPP的即時通訊指令的傳遞基礎,也是一個非常重要的可以被進一步利用的網路基礎協議。所以可以說,XMPP用TCP傳的是XML流。


4、XMPP協議示例
客戶端:
to='example.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
伺服器:
from='example.com'
id='someid'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>


…其他通訊…

  客戶端:

  <message from='juliet_example_com'

  to='romeo_example_net'

  xml:lang='en'>

  客戶端: <body>Art thou not Romeo, and a Montague?</body>

  客戶端:</message>

  伺服器:

  <message from='romeo_example_net'

  to='juliet_example_com'

  xml:lang='en'>

  伺服器:<body>Neither, fair saint, if either thee dislike.</body>

  伺服器:</message>

  客戶端:</stream:stream>

  伺服器:</stream:stream>


以文件的觀點來看,客戶端或伺服器傳送的所有XML文字連綴在一起,從到構成了一個完整的XML文件。其中的stream標籤就是所謂的XML Stream。在與中間的那些…這樣的XML元素就是所謂的XML Stanza(XML節)。XMPP核心協議通訊的基本模式就是先建立一個stream,然後協商一堆安全之類的東西,中間通訊過程就是客戶端傳送XML Stanza,一個接一個的。伺服器根據客戶端傳送的資訊以及程式的邏輯,傳送XML Stanza給客戶端。但是這個過程並不是一問一答的,任何時候都有可能從一個方發信給另外一方。通訊的最後階段是關閉流,關閉TCP/IP連線。
採用XMPP協議的即時通訊應用,Google Talk是基於XMPP協議,而且它還允許其它IM自由使用XMPP協議。如此一來,任何IM供應商在遵循XMPP協議的前提下,都可以隨時與Google Talk實現免費連線.


5、XMPP系統特點

(1) 客戶機/伺服器通訊模式

(2) 分散式網路

(3) 簡單的客戶端

(4) XML的資料格式


XMPP協議通俗理解,XMPP 其實是一種很類似於http協議的一種資料傳輸協議,它的過程就如同“解包裝--〉包裝”的過程,使用者只需要明白它接受的型別,並理解它返回的型別,就可以很好的利用xmpp來進行資料通訊。



主流的四種IM通訊協議簡介

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資料。

相關文章