2012-08-04 167 views
15

我有一个webapp,它在浏览器中运行。该webapp连接到使用websockets的服务器。所以服务器和我的客户端/浏览器之间的通信是基于websockets的。如果服务器上发生了一些不可思议的事件,一些web服务会向我的web应用程序发送一个新的XML/JSON,并显示新的数据。我如何知道连接是否与websockets一起存在?

但是,作为客户端/浏览器,我该如何知道连接是否仍然活着?比方说,我没有得到任何新的XML约30秒。我怎么知道连接是关闭/断开/服务器脱机还是一切正常,但服务器本身并没有发生新的魔术事件。

回答

18

3种方式:

  • 依靠TCP检测连接丢失,这将最终从服务器弹出的JS onClose事件会
  • 发送的WebSocket坪..浏览器将与WS pongs,损失回复连接可能在客户端更强大地检测到
  • 从浏览器向服务器发送应用程序级别心跳,服务器需要有逻辑回复。你不能触发WS坪从浏览器(在JS)
+0

标准中没有定义什么东西吗?还是我必须手动完成所有的“工作”? – Gero 2012-08-04 19:01:57

+0

该标准提供了一种检测和通知TCP相关连接故障端点(通常包括许多服务器问题)的方法。如果您希望在TCP计算出来之前能够检测到故障,或者TCP连接处于活动状态但服务器本身未处理消息的错误情况,则需要手动执行。 – zaphoyd 2012-08-05 13:44:53

+0

好吧,我明白了,但它似乎有点含糊。它看起来像7条不同的罗马路。 – Gero 2012-08-06 12:26:39

22

一个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事件,如果这是你想处理(尝试重新连接,等等)。

+7

ReadyState在断开时不会改变 – megawac 2014-05-15 14:07:12

+1

对于任何查看上面评论的人来说:根据我的经验,使用socket.close()关闭套接字将改变就绪状态 – Brandon 2015-05-31 04:26:04

+0

是的,我同意Brandon在关闭连接时显示“3” – 2015-12-01 21:58:28

相关问题