我怎么知道连接是否与websockets一起存在?

时间:2012-08-04 14:08:04

标签: websocket dart

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

但是,作为客户端/浏览器,我如何知道连接是否仍处于活动状态?假设我在大约30秒内没有获得任何新的XML。我怎么知道连接是关闭/中断/服务器离线还是一切正常,但在服务器上本身没有发生新的魔术事件。

2 个答案:

答案 0 :(得分:24)

websocket连接对象有一个readyState字段,可以告诉您连接是否仍处于活动状态(from the dart documentation)。 readyState可以是

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

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

答案 1 :(得分:19)

3种方式:

  • 依靠TCP来检测连接丢失,最终会在JS onclose事件中弹出
  • 从服务器发送WebSocket ping ...浏览器将使用WS pongs进行回复,在客户端也可能更强大地检测到连接丢失
  • 从浏览器向服务器发送应用级心跳,服务器需要有逻辑回复。你不能从浏览器(在JS中)触发WS ping