在下面的场景和其他情况下,服务器如何知道在HTML5中关闭Web Socket连接。
答案 0 :(得分:1)
如果客户端退出而无法通知服务器,则TCP实现的基本特征将定义行为。
只要您的应用程序(和主机系统本身)不尝试通过此断开的连接发送任何数据,主机就不会意识到出现了问题。因此,从服务器的角度来看,连接可以保持“开放”状态并分配资源。
但是,在尝试将数据发送到远程端时,远程端将不会确认检索并且TCP重新传输开始起作用。它涉及一定数量的重复和使用的超时。确切的参数取决于实现(使用的操作系统)。当重新传输最终失败时,TCP连接将关闭,资源将在服务器端释放。所以你可以
答案 1 :(得分:0)
您问题中最简单的部分是浏览器刷新部分。 IE,FF和Chrome将关闭打开的连接并打开一个新连接。我猜,任何其他浏览器都会这样做。
第1点和第3点我只能猜测:如果客户端仍然可以干净地关闭tcp连接,服务器将立即识别出连接已经关闭。如果您使用的是tomcat,则会调用MessageInbound实例的onClose方法。
如果客户端无法完全关闭tcp连接,服务器将等待某种超时。当服务器尝试向套接字写入内容时,服务器肯定会超时。您可以实现心跳机制来执行此操作。 Websockets似乎可以选择自动心跳,但并非所有浏览器和服务器都支持它。