保活 心跳機制

2021-07-25 02:39:25 字數 812 閱讀 2070

英文: heartbeat mechanism

中文: 保活機制、心跳機制

介紹: 雙方建立互動的連線,但是並不是一直存在資料互動,有些連線會在資料互動完畢後,主動釋放連線,而有些不會,那麼在長時間無資料互動的時間段內,互動雙方都有可能出現掉電、宕機、異常重啟等各種意外,當這些意外發生之後,這些tcp連線並未來得及正常釋放,那麼,連線的另一方並不知道對端的情況,它會一直維護這個連線,長時間的積累會導致非常多的半開啟連線,造成端系統資源的消耗和浪費,為了解決這個問題,在傳輸層可以利用tcp的保活報文來實現。

在tcp的機制裡面,本身是存在有心跳包的機制的,也就是tcp的選項。系統預設是設定的是2小時的心跳頻率。但是它檢查不到機器斷電、網線拔出、防火牆這些斷線。而且邏輯層處理斷線可能也不是那麼好處理。一般,如果只是用於保活還是可以的。心跳包一般來說都是在邏輯層傳送空的包來實現的。下乙個定時器,在一定時間間隔下傳送乙個空包給客戶端,然後客戶端反饋乙個同樣的空包回來,伺服器如果在一定時間內收不到客戶端傳送過來的反饋包,那就只有認定說掉線了。只需要send或者recv一下,如果結果為零,則為掉線。

但是,在長連線下,有可能很長一段時間都沒有資料往來。理論上說,這個連線是一直保持連線的,但是實際情況中,如果中間節點出現什麼故障是難以知道的。更要命的是,有的節點(防火牆)會自動把一定時間之內沒有資料互動的連線給斷掉。在這個時候,就需要我們的心跳包了,用於維持長連線,保活。在獲知了斷線之後,伺服器邏輯可能需要做一些事情,比如斷線後的資料清理呀,重新連線呀當然,這個自然是要由邏輯層根據需求去做了。總的來說,心跳包主要也就是用於長連線的保活和斷線處理。一般的應用下,判定時間在 30 - 40秒 比較不錯。如果實在要求高,那就在 6 - 9秒。

長連線 心跳保活機制

而在實現長連線方式時,存在很多效能問題,如 長連線保活 今天,我將 手把手教大家實現自適應的心跳保活機制,從而能高效維持長連線 確保實時性 避免短時間內重複連線所造成的通道資源 網路資源的浪費 可是,長連線會存在斷開的情況,而 斷開原因 主要是 長連線所在程序被殺死 nat超時 網路狀態發生變化 其...

tcp心跳機制

對連線上來的連線,進行檢測,以防止客戶端異常關閉,或線路異常斷開,而伺服器不知道,得到乙個半連線這種情況。當然可以在協議裡加乙個心跳包,然後伺服器端定時檢測,過一段時間就去輪訓一次,看哪些連線超過多少時間沒有反應。超時就關閉。但這樣有點不爽,要自己寫程式碼來完成。還要鎖定連線列表,代價挺大的。記得以...

Eureka 心跳機制

server服務端 server port 8761 eureka client 例項是否在eureka伺服器上註冊自己的資訊以提供其他服務發現,預設為true register with eureka false 此客戶端是否獲取eureka伺服器登錄檔上的註冊資訊,預設為true fetch r...