複製鏈接
請複製以下鏈接發送給好友

XMPP

鎖定
XMPP是一種基於標準通用標記語言的子集XML的協議,它繼承了在XML環境中靈活的發展性。因此,基於XMPP的應用具有超強的可擴展性。經過擴展以後的XMPP可以通過發送擴展的信息來處理用户的需求,以及在XMPP的頂端建立如內容發佈系統和基於地址的服務等應用程序。而且,XMPP包含了針對服務器端的軟件協議,使之能與另一個進行通話,這使得開發者更容易建立客户應用程序或給一個配套系統添加功能。
中文名
可擴展通訊和表示協議
外文名
Extensible Messaging and Presence Protocol
外語縮寫
XMPP
功    能
XMPP用TCP傳的是XML流

XMPP定義

全稱:可擴展通訊和表示協議
簡介:可擴展通訊和表示協議(XMPP)可用於服務類實時通訊、表示和需求響應服務中的XML數據元流式傳輸。XMPP以Jabber協議為基礎,而Jabber是即時通訊中常用的開放式協議。
XMPP(可擴展消息處理現場協議)是基於可擴展標記語言(XML)的協議,它用於即時消息(IM)以及在線現場探測。它在促進服務器之間的準即時操作。這個協議可能最終允許因特網用户向因特網上的其他任何人發送即時消息,即使其操作系統和瀏覽器不同。
XMPP的前身是Jabber,一個開源形式組織產生的網絡即時通信協議。XMPP被IETF國際標準組織完成了標準化工作。標準化的核心結果分為兩部分;
核心的XML流傳輸協議
基於XMLFreeEIM流傳輸的即時通訊擴展應用
XMPP的核心XML流傳輸協議的定義使得XMPP能夠在一個比以往網絡通信協議更規範的平台上。藉助於XML易於解析和閲讀的特性,使得XMPP的協議能夠非常漂亮。
XMPP的即時通訊擴展應用部分是根據IETF在這之前對即時通訊的一個抽象定義的,與其他業已得到廣泛使用的即時通訊協議,諸如AIM,QQ等有功能完整,完善等先進性
XMPP的擴展協議Jingle使得其支持語音和視頻。
XMPP的官方文檔是RFC 3920。

XMPP基本網絡結構

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

XMPP功能

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

XMPP具體應用

舉個例子看看所謂的XML(標準通用標記語言的子集)流是什麼樣子的?
客户端:
<?xmlversion='1.0'?>
<stream:stream
to='example_com'
xmlns='jabber:client'
xmlns:stream='http_etherx_jabber_org/streams'
version='1.0'>
服務器:
<?xmlversion='1.0'?>
<stream:stream
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='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>
客户端:
</stream:stream>
服務器:
</stream:stream>
以文檔的觀點來看,客户端或服務器發送的所有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系統特點

  1. 客户機/服務器通信模式;
  2. 分佈式網絡;
  3. 簡單的客户端;
  4. 標準通用標記語言的子集XML的數據格式。

XMPP通俗解釋

其實XMPP是一種很類似於http協議的一種數據傳輸協議,它的過程就如同“解包裝——包裝”的過程,用户只需要明白它接收的類型,並理解它返回的類型,就可以很好的利用xmpp來進行數據通訊

XMPP優劣點

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技術開發軟件,資源及支持的來源是多樣的,使得使你不會陷於被“綁架”的困境。

XMPP缺點

隨着通常超過70%的XMPP協議的服務器的數據流量的存在和近60%的被重複轉發,XMPP協議擁有一個大型架空中存在的數據提供給多個收件人。新的議定書正在研究,以減輕這一問題。
XMPP協議的方式被編碼為一個單一的長的XML文件,因此無法提供修改二進制數據。因此,文件傳輸協議一樣使用外部的HTTP。如果不可避免,XMPP協議還提供了帶編碼的文件傳輸的所有數據使用的Base64。至於其他二進制數據加密會話(encrypted conversations)或圖形圖標(graphic icons)以嵌入式使用相同的方法。