閱讀原文:https://wdd.js.org/websocket-...html
WebSocket斷開的緣由有不少,最好在WebSocket斷開時,將錯誤打印出來。git
在線demo地址:https://wdd.js.org/websocket-...github
ws.onclose = function (e) { console.log('websocket 斷開: ' + e.code + ' ' + e.reason + ' ' + e.wasClean) console.log(e) }
若是你想本身玩玩WebSocket, 可是你又不想本身部署一個WebSocket服務器,你可使用
ws = new WebSocket('wss://echo.websocket.org/')
, 你向echo.websocket.org發送消息,它會回覆你一樣的消息。
WebSocket斷開時,會觸發CloseEvent
, CloseEvent會在鏈接關閉時發送給使用 WebSockets 的客戶端. 它在 WebSocket 對象的 onclose 事件監聽器中使用。CloseEvent的code字段表示了WebSocket斷開的緣由。能夠從該字段中分析斷開的緣由。web
CloseEvent有三個字段須要注意, 經過分析這三個字段,通常就能夠找到斷開緣由正則表達式
CloseEvent.code
: code是錯誤碼,是整數類型CloseEvent.reason
: reason是斷開緣由,是字符串CloseEvent.wasClean
: wasClean表示是否正常斷開,是布爾值。通常異常斷開時,該值爲false通常來講1006
的錯誤碼出現的狀況比較常見,該錯誤碼通常出如今斷網時。chrome
狀態碼 | 名稱 | 描述 |
---|---|---|
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 | 能夠由應用使用. |
若是你的服務所在的域是HTTPS的,那麼使用的WebSocket協議也必須是wss
, 而不能是ws
瀏覽器
web-socket-js是基於flash的技術,只須要引入兩個js文件和一個swf文件,就可讓瀏覽器用於幾乎原生的WebSocket接口。另外,web-socket-js仍是須要在ws服務端843端口作一個flash安全策略文件的服務。安全
我本身曾經基於stompjs和web-socket-js,作WebSocket兼容到IE5, 固然了stompjs在低版本的IE上有兼容性問題, 並且stompjs已經再也不維護了,你可使用我fork的一個版本,地址是:https://github.com/wangduandu...服務器
主要是老版本IE在正則表達式行爲方面有點異常。websocket
// fix ie8, ie9, RegExp not normal problem // in chrome the frames length will be 2, but in ie8, ie9, it well be 1 // by wdd 20180321 if (frames.length === 1) { frames.push('') }