1. 程式人生 > 其它 >NETTY keeplive 引數,心跳檢測

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。

當設定為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。