Wakanda websocket onclose没有在网络断开时触发

时间:2016-09-22 15:08:01

标签: wakanda

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

我原本预计,当我打破网络连接时,我也会触发此事件。我误会了吗?当网络连接丢失到websocket客户端时,有没有办法让函数触发?

供参考,我正在使用Wakanda 10。

1 个答案:

答案 0 :(得分:2)

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

  • 它使用TCP
  • 如果远程客户端(例如浏览器)正常关闭TCP连接,则通知服务器(FIN)
  • 如果远程客户端崩溃,则运行客户端应用程序的操作系统会通知服务器(RST)
  • 如果在服务器和客户端之间打开TCP连接,即使一段时间内绝对没有数据交换,也会假定连接处于打开状态,除非 keepalive 被激活。
  • WebSocket规范添加了一条关闭消息,以便服务器/客户端可以处理正常关闭
  • WebSocket规范添加了ping / pong消息交换,但没有强制超时。来自RFCUpon 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条消息

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

  • 使用ping
  • message port中公开pong timeout方法
  • 在添加websocket handler时添加一个websocket keepalive选项,其中包含可配置的超时。
  • 在添加websocket handler时添加带有可配置超时的TCP keepalive选项。

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