2016-09-22 110 views
1

我在Wakanda服務器上有一個websocket實現。我正在跟蹤連接的瀏覽器服務器端。當我重新加載頁面時,我按預期得到websocket的onclose事件。Wakanda websocket onclose not firing on network disconnect

我會期望當我打破網絡連接,我也會有這個事件觸發。我誤解了嗎?當網絡連接丟失到websocket客戶端時,有沒有辦法讓函數觸發?

僅供參考,我使用Wakanda 10

回答

2

爲了幫助您瞭解的問題,我會給你WebSocket連接的一些細節:

  • 它使用TCP
  • 如果遠程客戶端(瀏覽器)正常關閉TCP連接服務器被通知(FIN)
  • 如果遠程客戶端崩潰,運行客戶端應用程序的操作系統會通知服務器(RST)
  • 如果服務器和客戶端之間的TCP連接是打開的,即使在一段時間內絕對沒有數據交換,連接也會被視爲打開,除非保持激活被激活。
  • WebSocket規範添加了一條關閉消息,以便服務器/客戶端可以處理一個優雅的關閉
  • WebSocket規範添加了ping/pong消息交換,但不強制超時。從RFCUpon receipt of a Ping frame, an endpoint MUST send a Pong frame in response, unless it already received a Close frame. It SHOULD respond with Pong frame as soon as is practical.
  • 在Wakanda的實現,我們收到ping消息作出響應,但不要把我們自己的ping消息

RFC的這可能是一個新的功能,我們可以:

  • 公開ping方法通過message portpong timeout
  • 添加websocket keepalive選項與可配置的時間在添加websocket handler時出來。
  • 在添加websocket handler時添加一個可配置超時的TCP保持活動選項。

暫時,你可以發送你選擇的消息發送到客戶端每ñ秒,等待與牛逼超時的響應。如果您沒有收到回覆,則可以認爲連接已丟失並關閉。

+0

感謝您的解釋。在閱讀了一些其他websocket實現規範後,我認爲它是類似的東西。我認爲這將是一個很好的功能,但這取決於你的團隊! –