XMPP學習1-認識XMPP

XMPP是什麼?

XMPP,可擴展消息處理和現場(出席)協議(eXtensible Messaging and Presence Protocol),是一種用來在兩個地點之間傳遞小型的結構化數據段的協議,一個關於收發消息的規範。

架構

這裏寫圖片描述
類似於萬維網和電子郵件網絡的架構一樣, XMPP 技術使用一種分散的客戶端-服務器架構使用分散的客戶端-服務器架構的優點在於它把人們關注的東西分離開來(客戶端開發者可以專注於用戶體驗,而服務器開發者可以專注於可靠性和擴展性);相對於純點對點技術,組織更容易使用這種結構進行管理;由於整個系統不存在單點失效,所以該結構也具有相當的魯棒性(任何人可以使用他們自己的 XMPP 服務器,並加入到網絡中);並且服務器可以執行如用戶認證,通道加密,防止地址欺騙等重要的安全政策。

XMPP系統

構建發佈-訂閱服務、多人聊天、表單檢索和處理、服務發現、實時數據傳輸、隱私控制以及遠程過程調用。

XMPP網絡

任何 XMPP 網絡都是由若干角色組成的,這些角色可以分爲服務器、客戶端、組件和服務器插件。
服務器
XMPP 服務器是XMPP網絡的交通系統,它的任務就是爲XMPP節提供路由,無論這些節是從內部的一個用戶發往另一個用戶,還是從本地用戶發往遠程服務器。常見的XMPP服務器包含Openfire、Ejabberd、Tigase、M-Link、Jabber-XCP等。
客戶端
大多數 XMPP 實體均是客戶端,它們通過客戶端-服務器協議連接到 XMPP 服務器。這些實體中許多都是由人類驅動的、傳統的 IM 用戶,但也有一些以機器人形式運行的自動化服務。
組件
並不只有客戶端能夠連接到XMPP服務器,大多數服務器還支持外部服務器組件。這些組件通過添加某種新服務來增強服務器的行爲。這些組件在服務器內部有各自的身份和地址,但在外部運行並通過組件協議通信,在外界看來,就猶如一個子服務器。
插件
有許多XMPP服務器還可以通過插件進行擴展。這些插件通常採用與服務器自身相同的編程語言編寫,並在服務器的進程內運行。它們的作用在很大程度上與外部組件重疊,但插件還能夠訪問內部服務器數據結構並改變核心服務器行爲。與組件相比,插件已經減輕了開銷,這是因爲它們不需要通過網絡套接字進行通信。它們也不需要分析或序列化XML,而是可以直接操作各節的內部服務器表示。

XMPP尋址

XMPP 網絡上的每個實體都有一個或多個地址(或稱爲 JID,jabber identifier)-形如[email protected]/resource
JID 由三部分組成:
節點(可選) -大小寫不敏感
域(必選)-大小寫不敏感
資源(可選) -大小寫敏感
JID劃分爲兩種類型,即裸JID和完整JID。完整JID總是特定實體的最具體的地址,而裸 JID只是完整JID去除資源部分後的地址。

XMPP節

在XMPP中,各項工作均是通過在一個XMPP流上發送和接收XMPP節來完成的(打開TCP連接,異步交換XML消息)。
核心XMPP 工具集由三種基本節組成:
1 <presence>
2 <message>
3 <iq>
下面的示例給出了一段經過簡化的簡短的 XMPP 會話。

<stream:stream>
     <iq type='get'>
         <query xmlns='jabber:iq:roster'/>
     </iq>

     <presence/>

     <message to='[email protected]'
                         from='[email protected]/ballroom'
                     type='chat'>
         <body>I cannot talk of books in a ball-room; my head is always full of
             something else.</body>
     </message>

     <presence type='unavailable'/>
</stream:stream>

在這個示例中
1 user1 通過發送起始<stream:stream> 標記創建了一個 XMPP 流
2 在打開流之後,user1使用<iq> 節請求獲取自己已存儲的花名冊
3 使用<presence>節來通知服務器自己在線並且可以訪問
4 向user2發送一條簡短的<message> 節,並拒絕試圖發起的聊天請求
5 發送了一個<presence> 節來告訴服務器自己不可訪問並關閉<stream:stream> 元素結束會話。

發佈了48 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章