2012-03-30 132 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在这里没有什么帮助,因为对于大多数操作系统来说,因为默认的保存时间非常长。

相关问题