XMPP,即時通信協議。
具體相關資料可以在各大搜索引擎找到。
本文僅做概述
XMPP出現的原因是目前IM已經成為主要的互聯網應用,因此就出現了一個問題,各大運營商不互通,各自的IM有各自的架構和方式。
另一個重要的互聯網應用Email,通過遵從SMTP和POP協議,讓各大服務提供商互通郵件。
為了讓IM軟件像Email一樣,實現服務商互通,於是又一幫人做出了一個標准化的即時通信協議XMPP,即時通信僅是XMPP協議實現的功能之一。
遵從XMPP協議搭建的即時通信平台就像是Email一樣,任何人都可以搭建自己的IM服務器,目前有很多開源的服務器端,類似搭建Email服務器的軟件一樣,當搭建好以后,任何遵從XMPP的客戶端都可以連接到這樣的IM服務端,與任何這樣的服務提供上內的用戶進行即時通信。
根據以上描述,很明顯,這非常的類似Email的概念,只是他是即時通信的。
最早提出這個方案並且實現是的Jabber,因此很多人也把XMPP協議稱為Jabber協議,目前運用這一技術最典型的服務商是Google的Gtalk。
在互聯網上搜索Jabber或XMPP協議可以找到大量資料,因為他是開源的。一下就具體說說實現方式。
其實並不神秘,計算機通信依然是最基礎的Socket,本人采用的是Openfire服務端(一個免費開源的XMPP服務端程序),工作原理了解之后並不需要花費大量的精力去開發服務端,可以用現成,就像不會有人去開發Email服務端一樣,作為開發人員來說,可能更關注客戶端,因為客戶端的實現有更大的靈活空間。
XMPP是一個協議,他才用XML文檔方式實現,只是約定這個XML如何寫,代表什么意思。
服務器和客戶端通信用這種約定的文檔格式發送消息,以便於互相能夠理解,並且不同的服務提供者互相理解,簡單點說就是約定好一種同樣的表達方式而已,至於真正的數據傳輸方式依然是Socket發送字節流,只是這些字節流是XMPP定義的文檔字符串轉換過來的。
客戶端與服務器端的一次對話是一個完成的XML文檔
<stream……>
…………
…………
</stream>
當客戶端發送一個<stream……>的數據過去表示連接,這時候服務端也會回發一段類似的文本過來(具體請查閱XMPP協議相關內容)
然后建立好連接,客戶端和服務端就會互相發送各種各樣的節來進行通話,例如發送<message……>……</message>節是發送消息,發送<iq……>……</iq>是執行查詢列表,登錄驗證等其他功能,還有一個<presence……>……<presence/>是報告狀態等。這些節,配合相應的屬性,From、To、type、xmlns等就可以組合成即時通信所會遇到的所有對話或通知情況。
所以,XMPP實際上就是有這么定義通信格式的一個規定,大家按照這格式來理解和告知別的服務提供者,如果大家都遵照這樣的約定,也就實現了即時通信的互聯互通。
本人雖然用了開源的服務端,在客戶端部分沒有用任何開源的接口,用的是最基礎的Socket方式,自己按照XMPP的約定格式組合XML字符串。
代碼示例將在以后推出,目前只是用Socket發送XMPP定義的文檔格式實現了信息通信,代碼沒有太多的可參考性。
