我的TCP服务器是使用Netty实现的。我的客户端使用普通 java.net.Socket 连接到该服务器。我使用同一个套接字向服务器发送多个请求。完成所有请求后,客户端调用 socket.close()
。
我不会在服务器代码中的任何地方关闭 channel 。另外,我在我的服务器上设置了 TCP KEEP_ALIVE。关闭客户端上的套接字会自动关闭服务器上的 channel 还是我必须明确地执行其他操作以及最佳实践是什么?
最佳答案
通常,如果应用程序关闭套接字,其远程对等方也会注意到该关闭。因此,您不需要在双方都调用 close() 。但是,有时,由于网络问题,当远程对等方关闭连接时,您可能不会收到通知。要解决此问题,最好定期发送一些消息,然后您就会更快地检测到意外关闭。
请注意,SO_KEEP_ALIVE 在这里没有多大帮助,因为对于大多数操作系统来说,默认的保持 Activity 时间非常长。
关于java - Netty - 关闭客户端的套接字是否会关闭服务器的 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9945122/