2016-02-29 53 views
4

有什麼利弊實現自己的心跳和setting`keepalive的插座?插座心跳VS存活

我讀的地方,是存活有時會失敗,連接將被關閉,反正(取決於網絡結構)。另一件事是自己的心跳可以檢測到應用程序是否響應(不僅是套接字)。

我的主要目標是確保所有這些:保持連接,即使沒有數據發送(旁邊可能心跳),兩側,應用響應檢測快速連接丟失檢測。

我已經實現了在兩端簡單的心跳和它的偉大工程,但我不知道,也許我可以開箱存活功能的更換。與TCP內置的存活功能

+0

不要對不是代碼的文本使用代碼格式。 – EJP

回答

3

一個問題是,它並不總是很容易配置。例如,在Linux上有各種選項setsockopt的()(例如TCP_KEEPIDLE,TCP_KEEPCNT和TCP_KEEPINTVL),您可以用它來存活的行爲設置爲你想要什麼,但in other OS's those behaviors are not easily adjusted, at least not programmatically。所以,如果你希望你的程序的keepalive行爲可以移植到各種操作系統上,並且在所有操作系統上保持一致,那麼通常情況下就需要滾動你自己的心跳。

另一方面,可能有一些程序或網絡協議不易支持心跳/無操作消息的概念(或者您可能希望程序能夠使用多種協議,而不必爲每個支持的協議提供單獨的保活邏輯),並且在這種情況下,您可能需要使用內置的保持連接,因爲它具有發送和接收「透明」Keepalive數據包的能力,這些數據包不會影響內容TCP數據流。在這種情況下,內置的keepalive會很有用(特別是如果你真的需要在Linux下運行keepalive代碼的話)。

+0

您是否知道任何情況下保持活着都不起作用?除了配置的東西。 –

+0

那麼,我在我的工作中編寫的控制軟件就是一個例子:它需要在Mac,Linux和Windows上運行,並且如果與服務器的連接丟失,它需要能夠在一秒鐘或兩秒內通知操作員因爲它在現場演出中控制音響系統,並且如果操作員不能控制聲音,他需要馬上知道,以便他可以採取行動)。對於這種用例,keepalive是不夠的,因爲在Windows和Mac下,客戶端計算機可能需要幾個小時才能確定連接已經丟失。 –