定義
全稱:可擴展通訊和表示協定
簡介:可擴展通訊和表示協定 (XMPP) 可用於服務類實時通訊、表示和需求回響服務中的XML數據元
流式傳輸。XMPP以Jabber協定為基礎,而Jabber是
即時通訊中常用的開放式協定。XMPP is the IETF's formalization of the base XML streaming protocols for instant messaging and presence developed within the Jabber open-source community in 1999
XMPP(可擴展訊息處理現場協定)是基於
可擴展標記語言(
XML)的協定,它用於即時訊息(
IM)以及線上現場探測。它在促進伺服器之間的準即時操作。這個協定可能最終允許網際網路用戶向網際網路上的其他任何人傳送即時訊息,即使其作業系統和瀏覽器不同。
XMPP的前身是
Jabber,一個開源形式組織產生的網路
即時通信協定。XMPP目前被
IETF國際標準組織完成了標準化工作。標準化的核心結果分為兩部分;
XMPP的核心XML流傳輸協定的定義使得XMPP能夠在一個比以往
網路通信協定更規範的平台上。藉助於XML易於解析和閱讀的特性,使得XMPP的協定能夠非常漂亮。
XMPP的即時通訊擴展套用部分是根據IETF在這之前對即時通訊的一個抽象定義的,與其他業已得到廣泛使用的即時通訊協定,諸如AIM,QQ等有功能完整,完善等先進性。
XMPP的擴展協定Jingle使得其支持語音和視頻。
XMPP的官方文檔是RFC 3920.
基本網路結構
XMPP中定義了三個角色,客戶端,伺服器,
網關。通信能夠在這三者的任意兩個之間雙向發生。伺服器同時承擔了客戶端信息記錄,連線管理和信息的路由功能。網關承擔著與異構
即時通信系統的互聯互通,
異構系統可以包括
SMS(簡訊),
MSN,
ICQ等。基本的網路形式是單客戶端通過
TCP/IP連線到單伺服器,然後在之上傳輸XML。
功能
傳輸的是與
即時通訊相關的指令。在以前這些命令要么用2進制的形式傳送(比如QQ),要么用純文本指令加空格加參數加換行符的方式傳送(比如MSN)。而XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協定的形式變成了XML格式的純文本。
具體套用
客戶端:
<?xmlversion='1.0'?><stream:streamto='example_com'xmlns='jabber:client'xmlns:stream='http_etherx_jabber_org/streams'version='1.0'>
伺服器:
<?xmlversion='1.0'?><stream:streamfrom='example_com'id='someid'xmlns='jabber:client'xmlns:stream='http_etherx_jabber_org/streams'version='1.0'>
客戶端:
<messagefrom='juliet_example_com'to='romeo_example_net'xml:lang='zh-cn'> <body>Art thou not Romeo, and a Montague?</body></message>
伺服器:
<message from='romeo_example_net'to='juliet_example_com'xml:lang='zh-cn'> <body>Neither, fair saint, if either thee dislike.</body></message>
客戶端:
伺服器:
以文檔的觀點來看,客戶端或伺服器傳送的所有XML文本連綴在一起,從<stream>到</stream>構成了一個完整的XML文檔。其中的stream標籤就是所謂的XML Stream。在<stream>與</stream>中間的那些<message>...</message>這樣的XML元素就是所謂的XML Stanza(XML節)。XMPP核心協定通信的基本模式就是先建立一個stream,然後協商一堆安全之類的東西,中間通信過程就是客戶端傳送XML Stanza,一個接一個的。伺服器根據客戶端傳送的信息以及程式的邏輯,傳送XML Stanza給客戶端。但是這個過程並不是一問一答的,任何時候都有可能從一方發信給另外一方。通信的最後階段是</stream>關閉流,關閉TCP/IP連線。
目前不少IM套用系統如:Google公司的Google Talk以及Jive Messenger等開源套用,都是遵循XMPP協定集而設計實現的,這些套用具有很好的互通性。
系統特點
客戶機/伺服器通信模式;
簡單的客戶端;
通俗解釋
其實XMPP 是一種很類似於http協定的一種數據
傳輸協定,它的過程就如同“解包裝--〉包裝”的過程,用戶只需要明白它接收的類型,並理解它返回的類型,就可以很好的利用xmpp來進行
數據通訊。
優劣點
優點
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及TL等技術的可靠安全性,已內置於核心XMPP技術規格中。
XML命名空間的威力可使任何人在核心協定的基礎上建造定製化的功能;為了維持通透性,常見的擴展有XMPP標準基金會。
XMPP除了可用在實時通信的應用程式,還能用在網路管理、內容供稿、協同工具、檔案共享、遊戲、遠程系統監控等。
用XMPP協定來建造及部署實時應用程式及服務的公司及開放原始碼計畫分布在各種領域;用XMPP技術開發軟體,資源及支持的來源是多樣的,使得使你不會陷於被“綁架”的困境。
缺點
隨著通常超過70%的XMPP協定的伺服器的數據流量的存在和近60%的被重複轉發,XMPP協定目前擁有一個大型架空中存在的數據提供給多個收件人。新的議定書正在研究,以減輕這一問題。
XMPP協定的方式被編碼為一個單一的長的XML檔案,因此無法提供修改二進制數據。因此, 檔案傳輸協定一樣使用外部的HTTP。如果不可避免,XMPP協定還提供了帶編碼的檔案傳輸的所有數據使用的Base64。至於其他二進制數據加密會話(encrypted conversations)或圖形圖示(graphic icons)以嵌入式使用相同的方法。