日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android心跳包作用,Android开发Im总结-5:心跳包

發布時間:2023/12/14 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android心跳包作用,Android开发Im总结-5:心跳包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

心跳包的作用:

TCP長連接本質上不需要心跳包來維持, 大家可以試一試, 讓兩臺電腦連上同一個wifi, 然后讓其中一臺做服務器, 另一臺用一個普通的沒有設置KeepAlive的Socket連上服務器, 只要兩臺電腦別斷網, 路由器也別斷電, DHCP正常續租, 就這么放著, 過幾個小時再用其中一臺電腦通過之前建立的TCP連接給另一臺發消息, 另一臺肯定能收到。

那為什么要有心跳包呢? 其實主要是為了防止上面提到的NAT超時, 既然一些NAT設備判斷是否淘汰NAT映射的依據是一定時間沒有數據, 那么客戶端就主動發一個數據。

當然, 如果僅僅是為了防止NAT超時, 可以讓服務器來發送心跳包給客戶端, 不過這樣做有個弊病就是, 萬一連接斷了, 服務器就再也聯系不上客戶端了. 所以心跳包必須由客戶端發送, 客戶端發現連接斷了, 還可以嘗試重連服務器。

所以心跳包的主要作用是防止NAT超時, 其次是探測連接是否斷開。

鏈路斷開, 沒有寫操作的TCP連接是感知不到的, 除非這個時候發送數據給服務器, 造成寫超時, 否則TCP連接不會知道斷開了. 主動kill掉一方的進程, 另一方會關閉TCP連接, 是系統代進程給服務器發的FIN. TCP連接就是這樣, 只有明確的收到對方發來的關閉連接的消息(收到RST也會關閉, 大家都懂), 或者自己意識到發生了寫超時, 否則它認為連接還存在。

心跳包的時間間隔

既然心跳包的主要作用是防止NAT超時, 那么這個間隔就大有文章了。

發送心跳包勢必要先喚醒設備, 然后才能發送, 如果喚醒設備過于頻繁, 或者直接導致設備無法休眠, 會大量消耗電量, 而且移動網絡下進行網絡通信, 比在wifi下耗電得多. 所以這個心跳包的時間間隔應該盡量的長, 最理想的情況就是根本沒有NAT超時, 比如剛才我說的兩臺在同一個wifi下的電腦, 完全不需要心跳包. 這也就是網上常說的長連接, 慢心跳。

現實是殘酷的, 根據網上的一些說法, 中移動2/3G下, NAT超時時間為5分鐘, 中國電信3G則大于28分鐘, 理想的情況下, 客戶端應當以略小于NAT超時時間的間隔來發送心跳包。

wifi下, NAT超時時間都會比較長, 據說寬帶的網關一般沒有空閑釋放機制, GCM有些時候在wifi下的心跳比在移動網絡下的心跳要快, 可能是因為wifi下聯網通信耗費的電量比移動網絡下小。

服務器如何處理心跳包

如果客戶端心跳間隔是固定的, 那么服務器在連接閑置超過這個時間還沒收到心跳時, 可以認為對方掉線, 關閉連接. 如果客戶端心跳會動態改變, 如上節提到的微信心跳方案, 應當設置一個最大值, 超過這個最大值才認為對方掉線. 還有一種情況就是服務器通過TCP連接主動給客戶端發消息出現寫超時, 可以直接認為對方掉線.

心跳包和輪詢的區別

心跳包和輪詢看起來類似, 都是客戶端主動聯系服務器, 但是區別很大:

輪詢是為了獲取數據, 而心跳是為了保活TCP連接。

輪詢得越頻繁, 獲取數據就越及時, 心跳的頻繁與否和數據是否及時沒有直接關系

輪詢比心跳能耗更高, 因為一次輪詢需要經過TCP三次握手, 四次揮手, 單次心跳不需要建立和拆除TCP連接.

總結

以上是生活随笔為你收集整理的android心跳包作用,Android开发Im总结-5:心跳包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。