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

Ger*_*ero 19 websocket dart

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

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

fuz*_*zic 24

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

0 - connection not yet established
1 - conncetion established
2 - in closing handshake
3 - connection closed or could not open
Run Code Online (Sandbox Code Playgroud)

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

  • 断开连接时readyState不会更改 (8认同)
  • @megawac是对的 - 我刚刚拔掉了我的服务器,浏览器中的websocket仍处于readyState 1状态.您必须定期执行ping/pong以确定连接是否保持活动状态. (3认同)

obe*_*tet 19

3种方式:

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