Response message: Received: Close frame with status code 1009 and close reason 'No async message support and buffer too small. Buffer size: [8,192], Message size: [51,926]'
斷開原因
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 | 可以由應用使用. |