代码之家  ›  专栏  ›  技术社区  ›  Salman Haq

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

  •  3
  • Salman Haq  · 技术社区  · 14 年前

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

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

    但是,如果守护进程首先完全关闭,则会触发“onclose”事件(如预期)。

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

    1 回复  |  直到 14 年前
        1
  •  6
  •   kanaka    14 年前

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

    我建议向服务器添加某种信号处理程序/退出陷阱,这样当服务器被杀死/关闭时,一个干净的关闭消息被发送到所有连接的客户端。

    还可以添加心跳机制(ala TCP keep alive