1. 程式人生 > >XMPP即時通訊機制

XMPP即時通訊機制

XMPP(Extensible Messaging and Presence Protocol)可擴充套件訊息呈現處理協議,一種基於XML的協議。

1、 XMPP可以實現多個客戶端、多個伺服器、多個閘道器的即時通訊
這裡寫圖片描述;
2、 通常客戶端與伺服器連線的端為:5222,伺服器與伺服器連線的埠為5269;
3、 XMPP在網路上進行通訊,所以每個通訊實體都有一個地址,這個地址通常包含三個欄位:Domain identifier(域名)、Node identifier(節點名)、Resource identifier(資源名),其中域名為必須元素,其他兩個為非必需元素。他們的格式是Node@Domain/Resource或者Node@Domain。

XML流

XMPP本質上是一種XML流技術,客戶端開始和XMPP伺服器進行通話時,會建立一個長時間的TCP連線,然後和伺服器協商一個XML流,一旦你和你的伺服器建立了一個XML流,你和伺服器之間就可以通過流交換三個特殊的XML片段:<message/>、<presenc/>、<iq/>,這些片段稱為XML節,是XML中三個最有意義的片段。
舉例說明XML流的語法格式(如下):
客戶端:
    <?xml version='1.0'?> 

    <stream:stream 

    to='example.com' 

    xmlns
='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>
伺服器:
    <?xml version='1.0'?> 

    <stream:stream 

    from='example.com' 

    id='someid' 

    xmlns='jabber:client' 

    xmlns:stream='http://etherx.jabber.org/streams' 

    version='1.0'>
以文件的觀點來看,客戶端或伺服器傳送的所有XML文字連綴在一起,從<stream>到</stream>構成了一個完整的XML文件。其中的stream標籤就是所謂的XML Stream。在<stream>與</stream>中間的那些<message>...</message>這樣的XML元素就是所謂的XML Stanza(XML節)。XMPP核心協議通訊的基本模式就是先建立一個stream,然後協商出需要通訊協議,中間通訊過程就是客戶端傳送的一個個XML Stanza,。伺服器根據客戶端傳送的資訊以及程式的邏輯,發回XML Stanza給客戶端。但是這個過程並不是一問一答的,任何時候都有可能從一個方發信給另外一方。通訊的最後階段是</stream>關閉流,關閉TCP/IP連線。

繫結到TCP上

在客戶端與伺服器通訊的過程中,伺服器必須允許多個客戶端共享一個TCP連線來傳輸XML節,包括從客戶端傳到伺服器和從伺服器傳到客戶端。
在伺服器與伺服器通訊的過程中,伺服器必須建立兩個TCP連線。一個用來向對方傳送XML節,一個用於接收對方傳來的XML節(此節由對方初始化)。
在這種通訊過程中,節 被認為是最基本的通訊單位,意義等同於一個數據包或其他網路通訊單位。

傳輸機制

XMPP是通過傳送XML檔案進行資訊交流的,並不是類似QQ的點對點通訊,而是客戶端到伺服器再到客戶端的通訊方式,舉例如下:
1、 由客戶端通過IO流向伺服器傳送XML檔案,其中包含自身的使用者名稱和密碼;
2、 伺服器收到客戶端發來的XML檔案後,提取其中的使用者名稱、密碼資訊,並對其進行驗證。驗證成功時則向客戶端會給客戶端發一個XML檔案表明已經登陸成功;
3、 登陸成功後,客戶端傳送一個獲取好友名單的XML檔案給伺服器,伺服器再將當前使用者的好友以XML檔案的方式發回給客戶端,
4、 客戶端選擇一個好友,並向好友傳送資訊(其實是客戶端先給伺服器傳送訊息,伺服器將訊息儲存並轉發個好友所在的客戶端),好友接收到訊息,通訊完成。