1

我在 Wakanda 服务器上有一个 websocket 实现。我正在跟踪连接的浏览器服务器端。当我重新加载页面时,我按预期获得了 websocket 的 onclose 事件。

当我断开网络连接时,我会期望我也会触发此事件。我是不是误会了?当网络连接丢失到 websocket 客户端时,有没有办法触发函数?

作为参考,我使用的是 Wakanda 10。

4

1 回答 1

2

为了帮助您理解问题,我将为您提供一些有关 websocket 连接的详细信息:

  • 它使用 TCP
  • 如果远程客户端(例如浏览器)正常关闭 TCP 连接,则通知服务器(FIN)
  • 如果远程客户端崩溃,运行客户端应用程序的操作系统会通知服务器 (RST)
  • 如果服务器和客户端之间的 TCP 连接是打开的,那么即使在一段时间内绝对没有数据交换,除非激活了keepalive ,否则该连接将被假定为打开的。
  • WebSocket 规范添加了关闭消息,以便服务器/客户端可以处理正常关闭
  • WebSocket 规范添加了 ping/pong 消息交换,但没有强制超时。来自RFC Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in response, unless it already received a Close frame. It SHOULD respond with Pong frame as soon as is practical.
  • 在 Wakanda 的 RFC 实现中,我们响应收到的ping消息但不发送我们自己的ping消息

这可能是一个新功能,我们可以:

  • 通过with暴露一个ping方法message portpong timeout
  • 在添加websocket handler.
  • 在添加websocket handler.

目前,您可以每N秒向客户端发送您选择的消息,并等待超时T的响应。如果您没有收到回复,您可以假设连接丢失并关闭它。

于 2016-10-03T08:01:56.810 回答