如何高效维持网络长连接
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                如何高效维持网络长连接
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                前言
- 當實現具備實時性需求時,我們一般會選擇長連接的通信方式
- 而在實現長連接方式時,存在很多性能問題,如 長連接?;?/li>
- 今天,我將?手把手教大家實現自適應的心跳保活機制,從而能高效維持長連接
1. 長連接 介紹
http的長連接和短連接(史上最通俗!)
2. 長連接斷開的原因
-  從上節可知,在長連接的情況下,雙方的所有通信 都建立在1條長連接上(1次TCP連接),需要持續保持雙方連接才可使得雙方持續通信。排除其他外因(網絡切換、NAT超時、人為原因),TCP長連接在雙方都不斷開連接的情況上,本質上是不會自動中斷的,即不需要心跳包來維持,驗證: 
1)讓2臺電腦連上同1個Wifi(其中1臺做服務器, 另1臺做客戶端連接服務器(無設置KeepAlive);
只要電腦、路由器不斷網斷電,那么,2臺電腦的長連接是不會自動中斷的。
可是,長連接會存在斷開的情況,而 斷開原因 主要是:
- 長連接所在進程被殺死
- NAT超時
- 網絡狀態發生變化
- 其他不可抗因素(網絡狀態差、DHCP的租期等等 )
下面,我將對每種原因進行分析
原因1:進程被殺死
當進程被殺死后,長連接也會隨之斷開
原因2:NAT 超時(重點關注)
原因3:網絡狀態發生變化
當移動客戶端網絡狀態發生變化時(如移動網絡 & Wifi切換、斷開、重連),也會使長連接斷開
原因4:其他不可抗因素
如網絡狀態差、DHCP的租期到期等等,都會使得長連接發生 偶然的斷開
3. 高效維持長連接的解決方案
- 在了解長連接斷開原因后,針對對應原因,此處給出?高效維持長連接的解決方案
- 為此,若需有效維持長連接,則需要做到
4、解決方案1:斷線重連機制
- 原理
 檢測網絡狀態變化 & 判斷連接的有效性
- 具體實現
 前者請參考文章:Android:檢測網絡狀態&監聽網絡變化;后者主要存在于心跳?;顧C制,所以下面會在心跳保活機制中一起講解。
5、解決方案2:進程保活
整體概括如下:
6、解決方案3:?心跳?;顧C制簡介
- 心跳保活機制的整體介紹如下
- 很多人容易混淆?心跳機制 & 輪詢機制,此處給出二者區別
- 主流心跳機制分析 & 對比
對國、內外主流的移動IM產品(WhatsApp、Line、微信)進行了心跳機制的簡單分析 & 對比,具體請看下圖
?
?
總結
以上是生活随笔為你收集整理的如何高效维持网络长连接的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: HttpDNS与传统DNS的区别
- 下一篇: 一个有趣的python排序模块:bise
