22

我有一个 webapp,它在浏览器中运行。该 webapp 连接到使用 websockets 的服务器。所以服务器和我的客户端/浏览器之间的通信是基于 websockets 的。如果服务器上发生了一些神奇的事件,一些 web 服务会向我的 webapp 发送一个新的 XML / JSON 并显示新的数据。

但是,作为客户端/浏览器,我如何知道连接是否仍然存在?假设我在大约 30 秒内没有得到任何新的 XML。我怎么知道连接是否关闭/断开/服务器脱机或一切正常,但在服务器本身上没有发生新的魔术事件。

4

2 回答 2

26

websocket 连接对象有一个readyState字段,它将告诉您连接是否仍处于活动状态(来自 dart 文档)。readyState 可以是

0 - connection not yet established
1 - conncetion established
2 - in closing handshake
3 - connection closed or could not open

close如果这是您想要处理的事情(尝试重新连接等),您还可以为 websocket 事件定义一个事件处理程序。

于 2012-09-17T19:47:18.010 回答
20

3种方式:

  • 依赖 TCP 检测连接丢失,最终会在 JS 的 onclose 事件中弹出
  • 从服务器发送 WebSocket pings .. 浏览器将回复 WS pongs,在客户端也可能更可靠地检测到连接丢失
  • 从浏览器向服务器发送应用级心跳,服务器需要有逻辑才能回复。您无法从浏览器触发 WS pings(在 JS 中)
于 2012-08-04T14:43:42.710 回答