無論是 PC 端還是移動端,接入網絡實現通信都需要建立雙端的連接。關注【融雲全球互聯網通信雲】了解更多
客戶端和服務端建立連接後不斷開,然後進行通信(也就是發送報文)的方式就是長連接。
與之相反,短連接是創建一個連接,在程序執行完畢後,就會自動斷掉。
二者相比,短連接會頻繁地創建和釋放連接,比較耗費資源。長連接就可以避免每次請求都創建連接的開銷,節省了時間和消耗,提高了性能。
本文梳理自 8 月 2 日的“IM 進階實戰高手課”内容,通過分析對比常見長連接協議、長連接協議的演進過程來拆解長連接協議設計要點,及融雲的最佳實踐。
長連接常見問題
安全性
首先是傳輸上的安全性,數據傳輸時需要經過通道層及應用層的加密,如 IPSec、TLS、PB 等。
其次,還需保證數據的實效性,具備防重放的特性。類似 5G 終端的認證是通過 SQN 帶上時間戳進行矢量校驗,保證數據的完整性和加密性。
最後會進行異常客戶端的檢測,通過動态認證密鑰,保證客戶端是可信的。
(長連接安全性)
可靠性
包括連接保持、快速重連和消息可達。主要通過心跳保活、弱網處理、就近接入等進行連接保持,設計快速認證重連策略實現低開銷,并由 QoS 質量保障确保消息可達。
(長連接可靠性)
低開銷
低開銷最根本的就是保證協議包體的大小合适,減少流量消耗,以及在解析協議包的時候,減少電量消耗。
并且,在應用及數據存儲上減少資源的消耗,以獲得更高的吞吐量和接入數。
(長連接低開銷)
長連接協議設計要點
長連接協議的設計要點,其實就是主要圍繞如何做到低開銷、安全性、可靠性以及協議的擴展性、完備性展開的。
(長連接協議設計要點)
業界常見的長連接協議如下:
我們詳細看看其中常用的幾種,SIP 是一個文本協議,支持 TCP、UDP、IPSec,比較符合國際規範,主要的應用領域是在電信領域如手機短信、手機音視頻通話、5G 消息(RCS)、SIP 話機、話務台,它的協議設計規範和業務規範都是咱們可以去參考的。
XMPP 是一個文本協議,通過 XML 傳輸,具備一定的通信協議規範,易讀性比較高,主要應用在即時通訊系統、遊戲平台、協作空間以及語音和視頻會議系統。這個協議的冗餘系數特别高,會帶來比較大的流量消耗。
MQTT 是一個開放消息協議,簡單易實現。采用發布訂閱模式,一對多消息發布。基于 TCP/IP 網絡連接,提供有序、無損的雙向連接。相較于上面兩種協議,它的協議包體特别小。1 字節固定報頭,2 字節心跳報文,最小化傳輸開銷和協議交換,有效減少網絡流量。
MQTT 協議廣泛應用于物聯網、移動互聯網、智能硬件、車聯網、電力能源等領域。
接下來咱們看一下這幾種協議一般在哪些場景或者層次上應用。
首先手機連網後如果要打電話,會通過 GTP 發送通話或者音視頻相關的數據信息。如果需要調用像運營商等技術能力,會通過類似于 XMPP 或者 SIP 去調一些開發能力。
在搭建雲平台的時候,需要有長連接通道,一般會有導航或者配置服務去下發地址,然後通過這個地址連上長連接服務。業務的内部通信,一般通過 RPC 進行,比如單聊、群聊、聊天室和超級群。如果要将這些能力開放出來,就需要有一個開放網關,針對長連接的一些技術做能力開放。
整體而言,常見協議的擴展性和完備性是相反的。
SIP 主要應用在電信領域,它的完備性或者标準業務的設計規範比較高,與此相應,它的擴展性會相對不足。
XMPP 雖然本身協議的開銷比較大,但是它的業務接口規範以及邏輯模型是可以參考的。
MQTT 協議的開銷比較少,但是它整個上層業務的架設并不是特别豐富。
從演進曆史的角度看,網絡演進基本上是 10 年一個叠代,每個階段都會催生不同的應用。
為了解決不同階段的相應需求問題,傳輸層協議的演進也有其階段性。
UDP 和 GDP 的産生基本上是在相同的時間,分别保證傳輸的速率和可靠性。SCTP 是保證可靠的同時,又保證吞吐量。但是因為它的基礎網絡相對來說比較穩定,針對時延的考慮不是特别多,後來又有了低時延多鍊路數據傳輸的 QUIC 協議。
比起傳輸層的協議,應用層協議的變化就不是特别大了。它們大部分是在上世紀 90 年代末産生,分别應用于不同的領域,像 HTTP 主要是 WEB,MQTT 主要是物聯網,SIP 主要是電信領域在用,XMPP 主要是即時通訊。
融雲長連接特性
融雲的長連接協議主要考慮了高效性和易用性兩大方面。其中,高效性包括對安全性、可靠性、完備性、擴展性以及低消耗的綜合考量設計。
安全性主要通過通道加密保證通道傳輸的安全,但是如果架設了中間層和中間人,就需要通過消息體加密保證數據傳輸的可靠性;在保證了傳輸層的安全性之後,還需要通過動态密鑰和認證碼去保證客戶端認證的安全性;最後就是保證數據的防重放。
可靠性就是需要通過客戶端和服務端的雙向心跳保活保證電路的可靠性;通過全球網絡電路的架設,比如節點之間架設專線,讓客戶端通過一個比較可靠的就近地址接入,保證數據傳輸的高效和低時延;然後通過包括 QoS 質量保障、狀态送達和弱網優化等來做應用層的消息送達保障。
完備性方面,融雲提供内容、通知等多種消息類型,單群聊、聊天室、超級群等多種業務類型服務。另外,為了保證排查問題的高效,融雲還在協議上進行了全鍊路消息的串聯,實現全鍊路消息的追蹤。
融雲在長連接協議的設計上,參考了業界常見協議的優勢特點,在保證數據傳輸低開銷的同時,又通過自定義消息類型和多層級消息通道、自定義業務流轉去保證擴展性。
在保證高效性的同時,融雲長連接設計還要通過豐富、多端、簡便、擴展、統一等特點實現易用性。
業務豐富,單群聊、聊天室、超級群等經典和新興的業務類型都能滿足,同時具備消息的多樣性,包括文本、圖片、音視頻、表情包等消息類型及其他業務場景的自定義消息。
多端覆蓋,原生的 Android、iOS,跨平台的 RN、Flutter 等全平台覆蓋,保證各端協議的一緻性,多端覆蓋且易于叠代。
多方統一,保證多端的統一性,長期協議的技術能力與融雲通信服務的開放能力是統一的。
開箱即用,通道簡便、協議簡潔。
高擴展性,在協議層保證業務架設可擴展。
,