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

标签 websocket

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

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

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

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

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

最佳答案

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

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

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

关于如果服务器崩溃,Websocket onclose/onerror 事件不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4089235/

相关文章:

python - Python 中的 WebSocket 帧解码

scala - PlayFramework Websocket HTTP 状态

c# - 代码隐藏和单独的 C# 类之间的区别

ruby - 使用 Puma 和 Bundler 在 Ruby 项目中使用 Intellij 调试 Websockets 应用程序

javascript - Socket io,JavaScript 数据未在表中更新自身

javascript - 如何绕过 Puppeteer 阻止系统

websocket - Microsoft Edge 不允许 websocket 的 localhost 环回

php - Ratchet PHP : How to mention host name?

Apache websocket 重定向到 Tomcat : mod_proxy and mod_proxy_wstunnel

lua - 如何使用 Lua 脚本语言打开网络套接字?