2012-08-04 166 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

相關問題