開源移動通訊架構與XMPP
XMPP由于上下游良好的開源生態得到了廣泛的采納與應用,但是到了移動為主的時代,XMPP的不足也暴露出來。
XMPP全稱是Extensible Messaging and Presence Protocol(也稱為Jabber),是一種支持消息及狀態的協議,但在線狀態在移動場景并是一個必需的feature。由于智能手機具有隨時在線的 特點,狀態可以視為永遠在線;即便在app沒有打開的情況下,系統可以通過push等方式發送最新的信息,因此大部分面向移動的通訊軟件直接去掉了狀態的 特性。因此設計成支持多終端狀態的XMPP在移動領域并不是擅長之地。另外一方面XMPP是一種基于XML的協議,它的請求及應答機制也是主要為穩定長連 網絡環境所設計,對于帶寬偏窄及長連不穩定的移動網絡并不是特別優化,因此它的弊端就充分暴露出來了。
移動領域也有不少非XMPP的開源實現,盡管贏得主流認可的不多。比較商業化的有telegram,其特性跟微信比較類似,在一些國家也取得了飛速發展,盡管其宣稱的開源還不完全。國內有前幾天蘑菇街發布的的TeamTalk,其開源地址是 https://github.com/mogutt 從發布的短短幾天來看, star/fork 數非常可觀。其介紹支持企業內部通訊場景,且具有完整的移動端支持。
最近也在考慮在這方面做一些嘗試,一個理想的適合移動時代的IM開源軟件,它應該具有哪些因素?
- 分布式擴展能力。在XMPP領域,由于Openfire的簡單易用,成為很多團隊首選的方案,但使用Openfire的團隊都需要接著思考擴展openfire的分布式擴展能力,以便承擔更大的用戶訪問規模。
- 移動友好的協議,協議具有良好的長連及短連自適應能力,具有數據的增量更新能力,較低的重連成本等。有網友推薦MQTT http://mqtt.org/,尚未深入評估。
- 移動SDK,主要實現協議層及網絡邏輯,以簡化客戶端接入及開發成本。
- 開發語言,更多考慮一些能帶來編程樂趣的新型語言,在一定程度上,scale的問題可以做到與語言無關。
在微博上交流的時候,一些網友還提到了XMPP的federation功能,federation類似郵件協議,利用XMPP可以實現多個域的用戶 互聯互通。但由于此功能對于企業的商業化利益較難看清,因此在過去很長一段時間都沒有得到充分發展。Google最近也放棄了多年來堅持的XMPP federation的支持。
需要補充的是,盡管前面提到XMPP種種問題,但是也別低估一種新協議的認知成本,很多時候選擇XMPP并不是因為它協議強大或多么適合用戶的場 景,而是當大眾群體已經了解一種協議之后,即使這種方式存在種種問題,但還是較難廣泛認可及接受一種方式或協議。在沒有特殊原因的情況下,普通的通訊場景 仍然建議使用XMPP方式。
來自:timyang