NETTY keeplive 參數,心跳檢測

當設置爲true的時候,TCP會實現監控連接是否有效,當連接處於空閒狀態的時候,超過了2個小時,本地的TCP實現會發送一個數據包給遠程的 socket,如果遠程沒有發回響應,TCP會持續嘗試11分鐘,知道響應爲止,如果在12分鐘的時候還沒響應,TCP嘗試關閉socket連接。

 

keepalive不是說TCP的常連接,當我們作爲服務端,一個客戶端連接上來,如果設置了keeplive爲true,當對方沒有發送任何數據過來,超過一個時間(看系統內核參數配置),那麼我們這邊會發送一個ack探測包發到對方,探測雙方的TCP/IP連接是否有效(對方可能斷點,斷網)。如果不設置,那麼客戶端宕機時,服務器永遠也不知道客戶端宕機了,仍然保存這個失效的連接。


當然,在客戶端也可以使用這個參數。客戶端Socket會每隔段的時間(大約兩個小時)就會利用空閒的連接向服務器發送一個數據包。這個數據包並沒有其它的作用,只是爲了檢測一下服務器是否仍處於活動狀態。如果服務器未響應這個數據包,在大約11分鐘後,客戶端Socket再發送一個數據包,如果在12分鐘內,服務器還沒響應,那麼客戶端Socket將關閉。如果將Socket選項關閉,客戶端Socket在服務器無效的情況下可能會長時間不會關閉。


儘管keepalive的好處並不多,但是很多開發者提倡在更高層次的應用程序代碼中控制超時設置和死的套接字。同時需要記住,keepalive不允許你爲探測套接字終點(endpoint)指定一個值。所以建議開發者使用的另一種比keepalive更好的解決方案是修改超時設置套接字選項。


說白了:這個參數其實對應用層的程序而言沒有什麼用。可以通過應用層實現瞭解服務端或客戶端狀態,而決定是否繼續維持該Socket。

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