2015-10-13 251 views
0

當建立到服務器的客戶機之間的網絡套接字連接的連接可以意外關閉,有以下幾個原因:在TCP信道上的WebSocket關閉錯誤處理

  1. 閒置。
  2. 服務器問題,使連接關閉。
  3. 客戶端崩潰或重新加載/刷新。

我正在尋找處理這種情況的方式,或者至少知道它們發生了。

當看到有關WebSocket的接近,我開始明白,可用於服務器知道客戶端已經崩潰坪pongs WebSocket協議支持服務器。 (不支持客戶端發起的乒乓球)。 - 這是處理客戶端崩潰的最佳方式嗎?

此外,我在規範中看到,在客戶端我們可以監聽onClose事件,並且有幾個代碼可以理解連接已關閉的原因 - 服務器崩潰時,總是調用onClose事件?

回答

1

服務器和客戶端都可以發送ping,但是在JavaScript API中沒有方法可以發送這樣的控制幀。

常用的方法是定期從服務器向客戶端發送協議級ping。如果服務器在給定的時間內沒有得到pong幀,服務器會斷開客戶端連接。

但是,客戶端也應該知道服務器是否無法訪問或連接是否打開一半,因此具有應用程序級別ping/pong(即:表示ping或pong的某些用戶數據)將允許服務器和客戶端找出如果另一端無法到達。和以前一樣,服務器可以在給定的時間內發送ping命令並期望pong,但是客戶端可能會在給定的時間內有ping命令,或者認爲自己已斷開連接,然後嘗試重新連接。

關於關閉的原因,值得進行檢查:getting the reason why websockets closed

如果服務器崩潰和連接保持半開,你就必須自己發現這一情況,並呼籲WebSocket的對象.close(),然後onclose事件將叫做。

+0

感謝您的迴應!通過連接保持半開放的意思是什麼? –

+0

例如,另一端死亡,您仍在等待消息。如果您嘗試發送某些內容,則底層TCP將檢測到連接實際上已斷開連接,否則您不會收到「關閉」事件。 http://superuser.com/questions/298919/what-is-tcp-half-open-connection-and-tcp-half-closed-connection – vtortola