版權所有,轉載請註明出處:http://guangboo.org/2013/02/21/xmpp-communication
分佈式框架
XMPP協議描述了全局唯一的通訊地址,就像email地址一樣,並且協議還描述了XMPP服務器之間的通訊,使得XMPP通訊不侷限於域內,而且支持跨域的通訊,也就是說jid爲[email protected]的用戶也可以與jid爲[email protected]的用戶進行通訊,具體通訊過程如下圖:
XMPP客戶端只能連接當前域的XMPP服務器,並完成驗證,綁定資源等操作。客戶端之間的通訊,如在同一域內則不必多說,當需要跨域通訊時,那麼服務器端負責服務器直接的通訊。因此服務器端不僅協調客戶端之間的消息交換,而且要負責服務器間的消息交換。
通訊過程
這裏以使用TCP連接爲例介紹XMPP通訊的過程:
- 建立TCP連接;
- 發送初始化XML流<stream>
- 流協商過程,客戶端詢問服務器端的特性支持情況,如強制性的特性出現不支持,將可能直接關閉XML流,並端口連接;
- 用戶驗證;
- 初始化出席信息,通知服務器自己的狀態;
- 數據交換,如發送、接收即時消息,查詢用戶信息等;
- 發送結束XML流</stream>;
- 關閉TCP連接。
XML表示
初始化流 | 響應流 | 說明 |
---|---|---|
<stream> | 發送初始化流 | |
<stream> | 服務器端響應 | |
<presence> <show/> </presence> |
發送出席狀態 | |
<message to='[email protected]'> <body/> </message> |
發送消息給[email protected] | |
<iq to='example.net' type='get'> <query/> </iq> |
向服務器做查詢操作 | |
<iq from='example.net' type='result'> <query/> </iq> |
返回查詢結果 | |
[...] | 發送其他消息 | |
[...] | 服務器反饋 | |
</stream> | 關閉流 | |
</stream> | 關閉流 |
以上大部分xml片段都是非常簡短的,實際的XML將會有許多屬性和子節點。