自研移動端IM的初步選型:

1.網絡傳輸協議的對比與選擇

    目前用於實現即時通信的網絡協議一般有TCP協議和UDP協議,下面咱們看一下二者有何區別。json

    TCP:TCP提供一種面向鏈接的、可靠的字節流服務。面向鏈接意味着兩個使用TCP的應用(一般是一個客戶和一個服務器)在彼此交換數據以前必須先創建一個TCP鏈接。TCP將用戶數據打包構成報文段;它發送數據後啓動一個定時器;另外一端對收到的數據進行確認,對失序的數據從新排序,丟棄重複數據;TCP提供端到端的流量控制,並計算和驗證一個強制性的端到端檢驗和。安全

    UDP:UDP是一個簡單的面向數據報的運輸層協議:進程的每一個輸出操做都正好產生一個UDP數據報,並組裝成一份待發送的IP數據報。這與面向流字符的協議不一樣,如TCP,應用程序產生的全體數據與真正發送的單個IP數據報可能沒有什麼聯繫。UDP把應用程序傳給IP層的數據發送出去,可是並不保證它們能到達目的地,也即不提供可靠性。服務器

    經過以上定義咱們不難看出,TCP具備更好的穩定性而且相對安全可靠,而UDP則更不可靠但也正由於其缺乏了保證可靠性的一系列校驗使得其並不須要維持TCP這樣的鏈接,因此UDP的資源佔用率更低而且每每傳輸效率也更高,由於沒必要進行收發數據的確認,因此UDP的實時性也更好。網絡

    最後結合考慮移動端要面臨的兩大挑戰:移動網絡的不穩定性、智能終端頻繁的系統休眠與網絡切換。顯然UDP比TCP更適合。可是因爲數據完整性、安全性的須要,又不該徹底放棄TCP的可靠與安全。因此更恰當的方式應該是兩種通訊協議同時使用,各有側重。UDP用於保持大量終端的在線與控制,應用與業務則經過TCP去實現。手機QQ就是採用這樣的方式:用UDP來保持在線,經過TCP來上傳和下載數據。框架

2.數據通信協議的選擇

    Protobuf協議

    一條消息數據,用protobuf序列化後的大小是json的10分之一,xml格式的20分之一,是二進制序列化的10分之一,整體看來ProtoBuf的優點仍是很明顯的。protobuf是google提供的一個開源序列化框架,相似於XML,JSON這樣的數據表示語言。protobuf在google中是一個比較核心的基礎庫,做爲分佈式運算涉及到大量的不一樣業務消息的傳遞,如何高效簡潔的表示、操做這些業務消息在google這樣的大規模應用中是相當重要的。而protobuf這樣的庫正好是在效率、數據大小、易用性之間取得了很好的平衡。分佈式

    XMPP協議

    簡介:基於XML協議的通信協議,前身是Jabber,目前已由IETF國際標準化組織完成了標準化工做。
    優勢:協議成熟、強大、可擴展性強、目前主要應用於許多聊天系統中。
    缺點:協議較複雜、冗餘(基於XML)、費流量、費電,部署硬件成本高。google

    MQTT協議

    簡介:輕量級的、基於代理的「發佈/訂閱」模式的消息傳輸協議。
   優勢:協議簡潔、小巧、可擴展性強、省流量、省電,目前已應用到企業領域,且已有C++版的服務端組件rsmb。
    缺點:不夠成熟、實現較複雜、服務端組件rsmb不開源,部署硬件成本較高。網絡傳輸協議

咱們初步肯定選擇的是MQTT格式,其一是由於移動端必須考慮流量因素,因此首先淘汰了XMPP,其次因爲咱們團隊以前並無IM開發經驗因此還須要考慮到開發難度與開發週期問題,雖然protobuf優勢衆多但畢竟目前使用protobuf的應用極少,因此咱們選擇了MQTT.spa

相關文章
相關標籤/搜索