XMPP

標記語言的子集XML的協議

XMPP是一種基於標準通用標記語言的子集XML的協議,它繼承了在XML環境中靈活的發展性。因此,基於XMPP的應用具有超強的可擴展性。經過擴展以後的XMPP可以通過發送擴展的信息來處理用戶的需求,以及在XMPP的頂端建立如內容發布系統和基於地址的服務等應用程序。而且,XMPP包含了針對伺服器端的軟體協議,使之能與另一個進行通話,這使得開發者更容易建立客戶應用程序或給一個配好系統添加功能。

定義


全稱:可擴展通訊和表示協議
簡介:可擴展通訊和表示協議 (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國際標準組織完成了標準化工作。標準化的核心結果分為兩部分;
核心的XML流傳輸協議
基於XMLFreeEIM流傳輸的即時通訊擴展應用
XMPP的核心XML流傳輸協議的定義使得XMPP能夠在一個比以往網路通信協議更規範的平台上。藉助於XML易於解析和閱讀的特性,使得XMPP的協議能夠非常漂亮。
XMPP的即時通訊擴展應用部分是根據IETF在這之前對即時通訊的一個抽象定義的,與其他業已得到廣泛使用的即時通訊協議,諸如AIMQQ等有功能完整,完善等先進性。
XMPP的擴展協議Jingle使得其支持語音和視頻。
XMPP的官方文檔是RFC 3920.

基本網路結構


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

功能


傳輸的是與即時通訊相關的指令。在以前這些命令要麼用2進位的形式發送(比如QQ),要麼用純文本指令加空格加參數加換行符的方式發送(比如MSN)。而XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文本。

具體應用


舉個例子看看所謂的XML(標準通用標記語言的子集)流是什麼樣子的?
客戶端:
1
2
3
4
5
6
to='example_com'
xmlns='jabber:client'
xmlns:stream='http_etherx_jabber_org/streams'
version='1.0'>
伺服器:
1
2
3
4
5
6
7
from='example_com'
id='someid'
xmlns='jabber:client'
xmlns:stream='http_etherx_jabber_org/streams'
version='1.0'>
其他通信
客戶端:
1
2
3
4
5
to='romeo_example_net'
xml:lang='zh-cn'>
Art thou not Romeo, and a Montague?
伺服器:
1
2
3
4
5
to='juliet_example_com'
xml:lang='zh-cn'>
Neither, fair saint, if either thee dislike.
客戶端:
1
伺服器:
1
以文檔的觀點來看,客戶端或伺服器發送的所有XML文本連綴在一起,從構成了一個完整的XML文檔。其中的stream標籤就是所謂的XML Stream。在中間的那些...這樣的XML元素就是所謂的XML Stanza(XML節)。XMPP核心協議通信的基本模式就是先建立一個stream,然後協商一堆安全之類的東西,中間通信過程就是客戶端發送XML Stanza,一個接一個的。伺服器根據客戶端發送的信息以及程序的邏輯,發送XML Stanza給客戶端。但是這個過程並不是一問一答的,任何時候都有可能從一方發信給另外一方。通信的最後階段是關閉流,關閉TCP/IP連接。
目前不少IM應用系統如:Google公司的Google Talk以及Jive Messenger等開源應用,都是遵循XMPP協議集而設計實現的,這些應用具有很好的互通性。

系統特點


客戶機/伺服器通信模式;
分散式網路;
簡單的客戶端;
標準通用標記語言的子集XML的數據格式。

通俗解釋


其實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)以嵌入式使用相同的方法。