xmpp(extensible messaging and presence protocol,前稱jabber)是一種以 xml 為基礎的開放式實時通訊協議,關於它的協議細節,網上已經有太多分析文章,我這裡就不再贅述(而且,我也不可能比別人解釋的更清楚)。簡單來看這個協議,我們只需要知道:
1,xmpp 的三種基本角色:客戶端、伺服器和閘道器,通訊能夠在這三者的任意兩個之間雙向發生。伺服器端同時承擔了客戶端資訊記錄、連線管理和資訊路由的功能。閘道器則承擔著與異構系統的互聯互通功能。在 rfc 3920 xmpp core 中對 xmpp 網路結構有乙個描述:
c1----s1---s2—c3
| c2----+--g1===fn1===fc1
這裡 c1,c2,c3 表示 xmpp 客戶端;s1,s2 表示 xmpp 伺服器;g1 表示閘道器,用來負責 xmpp 協議和外部聊天協議的轉換;fn1 表示外部訊息網路的伺服器,fc1 表示外部網路客戶端。
大家可能會奇怪,這裡為什麼需要乙個閘道器呢。這要從 xmpp 的**說起。1996 年 mirabilis 公司推出了世界上第乙個即時通訊系統 icq,不到 10 年,im 就成了最流行的應用之一,msn、gtalk、雅虎即時通、aim、adium、pidgin 等各種軟體如雨後春筍般湧現,但是這些服務之間沒有統一的標準,不能互聯互通,xmpp 的設計目的就是為了實現整個及時通訊服務協議的互通,讓 im 成為繼 web 和 email 之後的網際網路第三大服務。
2,xmpp 的訊息格式。
xmpp 協議的所有訊息都是 xml 格式的,這是 xmpp 協議的另乙個充滿歷史意味的選擇,想當年 soa / soap 一時間爆發起來,很多訊息交換協議都採用了 xml 格式,但是不想 xml 很快就成了「大資料」的代名詞。在 rfc 3920 xmpp core 中定義了兩個基礎概念,xml stream 和 xml stanza,xml stream 是兩個節點之間進行資料交換的容器,它定義了頂層的xml節點 ;xml stanza 則定義了實體訊息的具體語義單元,在 xmpp 中定義了 3 個頂層訊息:
2.1 presence
用於確定使用者的狀態。訊息結構舉例如下(每個 xml 的 node 還會有很多其他 attribute,為了簡單起見這裡省略,下同):
online
2.2 message
用於在兩個使用者之間傳送訊息。訊息結構舉例如下:
hello
2.3 iq
資訊/請求,是乙個請求-響應機制,管理xmpp伺服器上兩個使用者的轉換,允許他們通過相應的xml格式進行查詢和響應。
3,xmpp 的互動流程。
xmpp 通過 tcp 傳輸了什麼內容?在 qq 裡面,訊息是使用二進位制形式傳送的,在 msn 裡面是採用純文字指令加引數加換行符的形式傳送的,而 xmpp 傳輸的即時通訊指令與他們相仿,只是協議的形式變成了 xml 格式的純文字,這讓解析更容易,方便了開發和查錯,但是也帶來了資料負載過重的缺點,而被人廣為詬病。
xmpp 聊天的過程如下:
所有從乙個 client 到另乙個 client 的訊息和資料都要經過 xmpp server;
client1 連線到server;
server 利用本地目錄系統的證書對其認證;
client1 指定 client2 目標位址,讓 server 告知 client2 目標狀態;
server 查詢,連線並進行互相認證;
client1 和 client2 進行互動。
**:
XMPP協議學習
xmpp協議簡介 xmpp extensible messageing and presence protocol 可擴充套件訊息與存在協議 是目前主流的四種im im instant messaging,即時訊息 協議之一,其他三種分別為 即時資訊和空間協議 impp 空間和即時資訊協議 prim...
XMPP協議介紹
通訊能夠在這三者的任意兩個之間雙向發生。伺服器同時承擔了客戶端資訊記錄,連線管理和資訊的路由功能。閘道器承擔著與異構即時通訊系統的互聯互通,異構系統可以包括sms 簡訊 msn,icq等。基本的網路形式是單客戶端通過tcp ip連線到單伺服器,然後在之上傳輸xml。客戶端利用xmpp 基於tcp i...
XMPP協議介紹
通訊能夠在這三者的任意兩個之間雙向發生。伺服器同時承擔了客戶端資訊記錄,連線管理和資訊的路由功能。閘道器承擔著與異構即時通訊系統的互聯互通,異構系統可以包括sms 簡訊 msn,icq等。基本的網路形式是單客戶端通過tcp ip連線到單伺服器,然後在之上傳輸xml。客戶端利用xmpp 基於tcp i...