我的TCP服务器是使用Netty实现的。我的客户端使用vanilla java.net.Socket连接到此服务器。我正在使用相同的套接字向服务器发送多个请求。完成所有请求后,客户端调用socket.close()
。
我没有在我的服务器代码中的任何地方关闭频道。另外,我在我的服务器上设置了TCP KEEP_ALIVE。关闭客户端上的套接字是否会自动关闭服务器上的通道,或者我是否要明确做其他事情,最佳做法是什么?
答案 0 :(得分:2)
通常,如果应用程序关闭套接字,则其远程对等方也会注意到该关闭。因此,您无需在两侧调用close()。但是,有时,由于网络问题,远程对等方关闭连接时可能不会收到通知。要解决这个问题,定期发送一些消息是个好主意,然后你会更快地检测到意外的关闭。
请注意SO_KEEP_ALIVE在这里没什么用,因为对于大多数操作系统来说,因为默认的保持活动时间很长。