⑴ 如何高效維持網路長連接:手把手教你實現 自適應的心跳保活機制
通過 長時間保持雙方連接 ,從而:
下面,我將對每種原因進行分析
當進程被殺死後,長連接也會隨之斷開
當移動客戶端網路狀態發生變化時(如移動網路 & Wifi切換、斷開、重連),也會使長連接斷開
如網路狀態差、 DHCP 的租期到期等等,都會使得長連接發生 偶然的斷開
其實,說得簡單點: 高效維持長連接的關鍵在於
整體概括如下:
這是本文的重點,下節開始會詳細解析
對國、內外主流的移動 IM 產品( WhatsApp 、 Line 、微信)進行了心跳機制的簡單分析 & 對比,具體請看下圖
下面,將根據市面上主流的心跳機制,設計 一套心跳機制方案
在下面的方案設計中,將針對這3個問題給出詳細的解決方案。
為了減少流量 & 提高發送效率,需要精簡心跳包的設計
主要從心跳包的內容 & 大小入手,設計原則具體如下
心跳包 = 1個 攜帶少量信息 & 大小在10位元組內 的信息包
為了 防止 NAT 超時 & 減少設備資源的消耗(網路流量、電量、CPU等等), 心跳發送的間隔時間 是 整個 心跳機制方案設計的重點。
心跳發送間隔時間的設計原則如下
下面,我將詳細講解 自適應心跳間隔時間 的設計方案
1.如何自適應計算心跳間隔 從而使得心跳間隔 接近 當前 NAT 超時時間?
註:只有當心跳間隔 接近 NAT 超時時間 時, 才能最大化平衡 長連接不中斷 & 設備資源消耗最低的問題 。
2.如何檢測 當前網路環境的 NAT 超時時間 發生了變化 ?
註:在檢測到 NAT 超時時間 發生變化後,重新自適應計算心跳間隔 從而使得心跳間隔 接近 NAT 超時時間
該機制的核心在於, 如何 判斷長連接的有效性
在網上流傳著一些用於判斷長連接是否有效的方案,具體介紹如下
至此,關於心跳保活機制已經講解完畢。
很多人認為, TCP 協議自身就有 KeepAlive 機制,為何基於它的通訊鏈接,仍需 在應用層實現額外的心跳保活機制 ?
先來看看 KeepAlive 機制 是什麼
KeepAlive 的機制 不可 替代心跳機制 的具體原因如下:
KeepAlive 機制無法代替心跳機制, 需要在應用層 自己實現心跳機制以檢測長連接的有效性,從而高效維持長連接
不定期分享關於 安卓開發 的干貨,追求 短、平、快 ,但 卻不缺深度 。