我们的移动设备和服务器之间有一个简单的客户端服务器架构,两者都是用 Java 编写的。一个极其简单的ServerSocket和Socket实现。然而一个问题是,当客户端突然终止(没有正确关闭套接字)时,服务器不知道它已断开连接。此外,服务器可以继续写入该套接字而不会出现任何异常。为什么?
根据文档,如果您尝试写入另一端无法访问的套接字,Java 套接字应该抛出异常!
连接最终将因重传超时 (RTO) 而超时。然而,RTO 是使用基于网络延迟 (RTT) 的复杂算法计算的,请参阅此 RFC,
http://www.ietf.org/rfc/rfc2988.txt http://www.ietf.org/rfc/rfc2988.txt
因此,在移动网络上,这可能需要几分钟。等待10分钟,看看是否可以超时。
解决此类问题的方法是在您自己的应用程序协议中添加心跳,并在未收到心跳的 ACK 时断开连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)