服务器如何知道如何在以下情况和其他情况下关闭HTML5中的Web套接字连接。HTML 5 - 浏览器上的Web套接字关闭
- 浏览器突然关闭
- 刷新浏览器(新的套接字连接建立或者它仍然会使用现有的连接)
- 系统突然断电
服务器如何知道如何在以下情况和其他情况下关闭HTML5中的Web套接字连接。HTML 5 - 浏览器上的Web套接字关闭
你的问题的最容易的部分是浏览器刷新部分。 IE,FF和Chrome将关闭打开的连接并打开一个新连接。我想,其他任何浏览器都会这样做。
点1和3我只能猜测:如果客户端仍然可以干净地关闭tcp连接,服务器将立即识别出连接已关闭。如果您正在使用tomcat,则将调用MessageInbound实例的onClose方法。
如果客户端无法干净地关闭tcp连接,服务器将等待某种超时。服务器在尝试向套接字写入内容时肯定会超时。你可以实现一个心跳机制来做到这一点。 Websockets似乎可以选择自动心跳,但并不是所有的浏览器和服务器都支持它。
如果客户端退出而不能通知服务器,TCP实现的基本特征定义了行为。
只要你的应用程序(和主机系统本身)不试图通过这个断开的连接发送任何数据,主机就不会意识到有什么问题。因此,从服务器的角度来看,连接可能会长时间处于“打开”状态并分配资源。
但是,在试图将数据发送到远端时,远端将不会确认检索并且TCP重传发挥作用。它涉及一定数量的重复和使用超时。确切的参数取决于实现(正在使用的操作系统)。当重传最终失败时,TCP连接关闭,资源在服务器端释放。所以,你可以
如果用户使用打开的Web套接字关闭浏览器选项卡,服务器将不知道该服务器已被立即关闭。但是,正如Jan-Philip所说,如果您尝试编写操作将会失败,并使用给出的错误知道连接的当前状态。
例如,当使用ws lib for nodejs时,如果您尝试将数据发送到已关闭的websocket,则会引发异常,并显示类似[Error:not opened]的错误。他们你知道连接不再存在,你可以做任何需要的清理。
结账保持活力。 http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html – nycynik 2013-03-07 14:58:29