如果服务器崩溃,Websocket onclose/onerror 事件不会触发

lvdongjie 阅读:117 2025-06-02 22:19:02 评论:0

我在 Firefox 4 和 Chrome 7 中观察到以下行为:

如果运行 websocket 守护程序的服务器崩溃、重新启动、失去网络连接等,则不会在客户端触发 'onclose' 或 'onerror' 事件。我希望在连接因任何原因中断时触​​发其中一个事件。

但是,如果守护程序首先干净地关闭,则会触发“onclose”事件(如预期的那样)。

为什么当守护进程没有正常关闭时,客户端认为 websocket 连接是打开的?

我想依靠预期的行为来通知用户服务器已不可用或客户端的互联网连接已中断。

请您参考如下方法:

TCP is like that .最新的 WebSockets 标准草案 (v76) 有一个 clean shutdown message机制。但如果没有它(或者如果它没有机会被发送),您将依赖正常的 TCP 套接字清理,这需要几分钟(或几小时)。

我建议向服务器添加某种信号处理程序/退出陷阱,以便在服务器被终止/关闭时,向所有连接的客户端发送干净的关闭消息。

您还可以向您的应用程序添加心跳机制(ala TCP keep alive)以检测另一端何时消失。


标签:WEB
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号