2012-03-30 161 views
1

我的TCP服務器是使用Netty實現的。我的客戶端使用vanilla java.net.Socket連接到此服務器。我使用相同的套接字向服務器發送多個請求。一旦完成所有請求,客戶端會呼叫socket.close()Netty - 是否關閉客戶端的套接字關閉服務器的通道

我沒有關閉我的服務器代碼中任何地方的頻道。另外,我在我的服務器上設置了TCP KEEP_ALIVE。關閉客戶端上的套接字會自動關閉服務器上的通道還是需要明確地做其他事情,最佳實踐是什麼?

+0

你可能想閱讀這個答案:http://stackoverflow.com/questions/2165670/socket-close-in-java。 – jgauffin 2012-04-02 07:09:27

回答

2

通常,如果一個應用程序關閉一個套接字,它的遠程對等方也會注意到這個關閉。因此,你不需要在兩邊調用close()。但是,有時由於網絡問題,您可能無法在遠程對等關閉連接時收到通知。要解決此問題,定期發送一些消息是一個不錯的主意,然後您會更快地檢測到意外關閉。

請注意SO_KEEP_ALIVE在這裏沒有什麼幫助,因爲對於大多數操作系統來說,因爲默認的保存時間非常長。

相關問題