websocket斷開連接 代碼解析

WebSocket斷開的原因有很多,最好在WebSocket斷開時,將錯誤打印出來。
ws.onclose = function (e) {
console.log('websocket 斷開: ’ + e.code + ’ ’ + e.reason + ’ ’ + e.wasClean)
console.log(e)
}
錯誤狀態碼:

WebSocket斷開時,會觸發CloseEvent, CloseEvent會在連接關閉時發送給使用 WebSockets 的客戶端. 它在 WebSocket 對象的 onclose 事件監聽器中使用。CloseEvent的code字段表示了WebSocket斷開的原因。可以從該字段中分析斷開的原因。

CloseEvent有三個字段需要注意, 通過分析這三個字段,一般就可以找到斷開原因

CloseEvent.code: code是錯誤碼,是整數類型
CloseEvent.reason: reason是斷開原因,是字符串
CloseEvent.wasClean: wasClean表示是否正常斷開,是布爾值。一般異常斷開時,該值爲false
狀態碼 名稱 描述
0–999 保留段, 未使用.
1000 CLOSE_NORMAL 正常關閉; 無論爲何目的而創建, 該鏈接都已成功完成任務.
1001 CLOSE_GOING_AWAY 終端離開, 可能因爲服務端錯誤, 也可能因爲瀏覽器正從打開連接的頁面跳轉離開.
1002 CLOSE_PROTOCOL_ERROR 由於協議錯誤而中斷連接.
1003 CLOSE_UNSUPPORTED 由於接收到不允許的數據類型而斷開連接 (如僅接收文本數據的終端接收到了二進制數據).
1004 保留. 其意義可能會在未來定義.
1005 CLOSE_NO_STATUS 保留. 表示沒有收到預期的狀態碼.
1006 CLOSE_ABNORMAL 保留. 用於期望收到狀態碼時連接非正常關閉 (也就是說, 沒有發送關閉幀).
1007 Unsupported Data 由於收到了格式不符的數據而斷開連接 (如文本消息中包含了非 UTF-8 數據).
1008 Policy Violation 由於收到不符合約定的數據而斷開連接. 這是一個通用狀態碼, 用於不適合使用 1003 和 1009 狀態碼的場景.
1009 CLOSE_TOO_LARGE 由於收到過大的數據幀而斷開連接.
1010 Missing Extension 客戶端期望服務器商定一個或多個拓展, 但服務器沒有處理, 因此客戶端斷開連接.
1011 Internal Error 客戶端由於遇到沒有預料的情況阻止其完成請求, 因此服務端斷開連接.
1012 Service Restart 服務器由於重啓而斷開連接.
1013 Try Again Later 服務器由於臨時原因斷開連接, 如服務器過載因此斷開一部分客戶端連接.
1014 由 WebSocket標準保留以便未來使用.
1015 TLS Handshake 保留. 表示連接由於無法完成 TLS 握手而關閉 (例如無法驗證服務器證書).
1016–1999 由 WebSocket標準保留以便未來使用.
2000–2999 由 WebSocket拓展保留使用.
3000–3999 可以由庫或框架使用.? 不應由應用使用. 可以在 IANA 註冊, 先到先得.
4000–4999 可以由應用使用.

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章