Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道WebSocket的连接是否处于活动状态?_Websocket_Dart - Fatal编程技术网

如何知道WebSocket的连接是否处于活动状态?

如何知道WebSocket的连接是否处于活动状态?,websocket,dart,Websocket,Dart,我有一个webapp,它在浏览器中运行。该webapp连接到使用WebSocket的服务器。因此,服务器和我的客户机/浏览器之间的通信是基于WebSocket的。如果服务器上发生了一些神奇的事件,一些Web服务会向我的webapp发送一个新的XML/JSON,并显示新的数据 但作为客户端/浏览器,我如何知道连接是否仍然存在?假设我在大约30秒内没有得到任何新的XML。我如何知道连接是否已关闭/断开/服务器脱机或一切正常,但在服务器上没有发生新的魔术事件。3种方法: 依靠TCP检测连接丢失,这最

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

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

3种方法:

  • 依靠TCP检测连接丢失,这最终会在JS onclose事件中弹出
  • 从服务器发送WebSocket ping。。浏览器将使用WS-pong进行响应,在客户端可能更可靠地检测到连接丢失
  • 将应用程序级心跳从浏览器发送到服务器,服务器需要有逻辑才能回复。您不能从浏览器触发WS-Ping(在JS中)

websocket连接对象有一个
readyState
字段,该字段将告诉您连接是否仍处于活动状态。readyState可以是

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

如果您想处理websocket
close
事件(尝试重新连接等),也可以为该事件定义事件处理程序。

标准中没有定义任何内容吗?或者我必须手动完成所有的“工作”吗?该标准提供了一种检测和通知端点TCP相关连接故障的方法(通常包括许多服务器问题)。如果您希望能够在TCP发现故障之前检测故障,或者在TCP连接处于活动状态但服务器本身未处理消息的情况下检测错误,则需要手动执行。好的,我理解,但它似乎有点模糊。看起来有7条通往罗马的路。你可以尝试每隔一段时间在插座上写字。如果套接字断开,则会抛出一个错误,您可以捕获该错误并重新建立套接字。对于查看上述注释的任何人:根据我的经验,使用socket.close()关闭套接字将更改就绪状态是的,我同意Brandon的说法,当您关闭连接时,它会显示“3”@megawac是对的——我刚拔下服务器,浏览器中的websocket仍保持在readyState 1中。您必须定期进行ping/pong以确定连接是否保持活动状态。是,使用ws.close关闭连接将更改readyState-脱机将不会@GregJohnson整个协议都进入了乒乓模式