我在Firefox 4和Chrome 7中观察到以下行为:
如果运行websocket守护程序的服务器崩溃,重新启动,丢失网络连接等,则客户端不会触发'onclose'或'onerror'事件。我希望在连接因任何原因被破坏时触发其中一个事件。
但是,如果守护程序首先干净地关闭,则会触发'onclose'事件(如预期的那样)。
为什么当守护程序没有正确关闭时,客户端会将websocket连接视为打开?
我希望依赖预期的行为来通知用户服务器已不可用或客户端的互联网连接中断。
答案 0 :(得分:6)
TCP is like that。最新的WebSockets标准草案(v76)具有clean shutdown message机制。但是没有它(或者如果它没有机会被发送)你依赖正常的TCP套接字清理,这需要几分钟(或几小时)。
我建议在服务器上添加某种信号处理程序/退出陷阱,这样当服务器被终止/关闭时,会向所有连接的客户端发送干净的关闭消息。
您还可以向应用程序添加心跳机制(ala TCP keep alive),以检测对方何时消失。