socket保活方案 Tcp KeepAlive和應用層HeartBeat

兩種方案: 1. TCP提供的keepalive 2. 應用層heartbeat機制
keepalive 是系統內核就做好的東西,socket提供了設置啓用的方法。原理是tcp連接閒置一段時間後,通過發送數據包(ack包)等待回覆確認。幾次過後,都沒有回覆的話,認爲斷開。

heartbeat 一個心跳機制。通常是客戶端每隔一小段時間向服務器發送一個數據包,通知服務器自己仍然在線,並傳輸一些可能必要的數據。使用心跳包的典型協議是IM。

keepalive優缺點

使用簡單,tcp協議提供的檢活(發送探測包 ack包)。

缺點就很多了很多了:

1. KEEPALIVE的目的是探測連接是否存在,無法檢測能不能發送數據,比如服務器由於負載過大到處無法響應請求,應用層的的原因導致數據無法傳輸,但是連接還是正常。

2. 如果TCP連接的一端斷網或者斷電,應用層並不知曉,繼續發送數據,這個數據包的優先級是高於KEEPALIVE的數據包,因此這個KEEPALIVE包是無法發送出去的,只有在長時間的重傳失敗後,我們才能判斷連接斷開,這段長時間,應用及其容易產生業務邏輯BUG。

 

heartbeat優缺點

缺點就是要應用層自己實現。自己利用socket編程實現。

優點

最大的有點就是自己實現檢測機制帶來的靈活性。

我們可以做很多事情:控制檢測時機,間隔和處理流程。還可以在發出的心跳包中加入額外信息。可以避免上面所說tcp keepalive的缺點。可以檢測連接存在,還可以檢測連接可用。

還有就是通用性,當傳輸層使用的是udp的時候,我們socket編程也不需要改變很多代碼。socket爲我們提供了tcp和udp編程。

 

上面討論的內容中多次提到了數據包,有關數據包的概念還是有必要去了解下。有篇文章講的不錯https://blog.csdn.net/weixin_41055137/article/details/80101297

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