2
我通过TCP连接使用ObjectStream
将数据从客户端发送到服务器。有些客户端在服务器仍在等待新数据时被终止。在这些情况下,readObject()
将保持阻塞状态而不会抛出异常,并且我的计算停止。ObjectInputStream.readObject()在断开连接时不会抛出异常
如何确定ObjectStream
是否已断开连接或仅等待更多数据?
由于通信之间的长时间延迟,使用超时很困难。
我通过TCP连接使用ObjectStream
将数据从客户端发送到服务器。有些客户端在服务器仍在等待新数据时被终止。在这些情况下,readObject()
将保持阻塞状态而不会抛出异常,并且我的计算停止。ObjectInputStream.readObject()在断开连接时不会抛出异常
如何确定ObjectStream
是否已断开连接或仅等待更多数据?
由于通信之间的长时间延迟,使用超时很困难。
唯一安全的方法是使用超时。我怀疑你在检测断开连接时看到的长时间延迟是由于你有网络的性质。
如果死连接的计算已停止,是否真的存在问题?这可能会浪费资源很短的时间,但您应该在几分钟内检测到故障并清理资源。
感谢生病尝试超时与一些“areyouthere?” - 消息来测试连接是否关闭。 – kasten 2011-05-01 15:37:36
您正在发送心跳对象。如果每次发送相同的消息,它将是发送心跳的有效方式。 – 2011-05-01 16:53:58