關於心跳包的說明

當客戶端的連接與服務器正常斷開時會觸發onClose。不管連接是如何斷開的,只要斷開就會觸發onClose。每個連接只會觸發一次onClose

注意:如果對端(服務端和設備端)是由於斷網或者斷電等極端情況斷開的連接,這時由於無法及時發送tcp的fin包到服務器或者設備端。

這種情況需要通過應用層心跳來解決。

正常的情況客戶端斷開連接會向服務端發送一個fin包,服務端收到fin包後得知客戶端連接斷開,則立刻觸發onClose事件回調。

但是有些極端情況如客戶端掉電、網絡關閉、拔網線、路由故障等,這些極端情況客戶端無法發送fin包給服務端,服務端便無法知道連接已經斷開。如果客戶端與服務端定時有心跳數據傳輸,則會比較及時的發現連接斷開,觸發onClose事件回調。

另外路由節點防火牆會關閉長時間不通訊的socket連接,導致socket長連接斷開。所以需要客戶端與服務端定時發送心跳數據保持連接不被斷開。

即通過TCP層面檢測連接的連通性(極端情況至少10分鐘才能檢測到連接斷開,甚至可能永遠檢測不到)。所以心跳包還是非常重要的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章