HTML 5 - 浏览器上的Web套接字关闭

时间:2013-03-01 13:04:19

标签: html5 websocket

在下面的场景和其他情况下,服务器如何知道在HTML5中关闭Web Socket连接。

  1. 浏览器突然关闭
  2. 浏览器刷新(创建新的Socket连接或仍然使用现有连接)
  3. 系统突然断电

2 个答案:

答案 0 :(得分:1)

如果客户端退出而无法通知服务器,则TCP实现的基本特征将定义行为。

只要您的应用程序(和主机系统本身)不尝试通过此断开的连接发送任何数据,主机就不会意识到出现了问题。因此,从服务器的角度来看,连接可以保持“开放”状态并分配资源。

但是,在尝试将数据发送到远程端时,远程端将不会确认检索并且TCP重新传输开始起作用。它涉及一定数量的重复和使用的超时。确切的参数取决于实现(使用的操作系统)。当重新传输最终失败时,TCP连接将关闭,资源将在服务器端释放。所以你可以

  • 依赖于以下事实:您的应用程序可能会在某个时刻写入丢失的远程端,同时触发检测到死连接
  • 通过在应用程序级别使用诸如ping这样的内容来检测丢失的远程终端
  • 通过TCP keepalive技术在操作系统级别使用类似ping的内容。

答案 1 :(得分:0)

您问题中最简单的部分是浏览器刷新部分。 IE,FF和Chrome将关闭打开的连接并打开一个新连接。我猜,任何其他浏览器都会这样做。

第1点和第3点我只能猜测:如果客户端仍然可以干净地关闭tcp连接,服务器将立即识别出连接已经关闭。如果您使用的是tomcat,则会调用MessageInbound实例的onClose方法。

如果客户端无法完全关闭tcp连接,服务器将等待某种超时。当服务器尝试向套接字写入内容时,服务器肯定会超时。您可以实现心跳机制来执行此操作。 Websockets似乎可以选择自动心跳,但并非所有浏览器和服务器都支持它。