摘要:閱讀原文把錯誤打印出來斷開的原因有很多,最好在斷開時,將錯誤打印出來。的字段表示了斷開的原因。有三個字段需要注意通過分析這三個字段,一般就可以找到斷開原因是錯誤碼,是整數類型是斷開原因,是字符串表示是否正常斷開,是布爾值。
閱讀原文:https://wdd.js.org/websocket-...
1. 把錯誤打印出來WebSocket斷開的原因有很多,最好在WebSocket斷開時,將錯誤打印出來。
在線demo地址:https://wdd.js.org/websocket-...
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發送消息,它會回復你同樣的消息。2. 重要信息錯誤狀態碼
WebSocket斷開時,會觸發CloseEvent, CloseEvent會在連接關閉時發送給使用 WebSockets 的客戶端. 它在 WebSocket 對象的 onclose 事件監聽器中使用。CloseEvent的code字段表示了WebSocket斷開的原因。可以從該字段中分析斷開的原因。
CloseEvent有三個字段需要注意, 通過分析這三個字段,一般就可以找到斷開原因
CloseEvent.code: code是錯誤碼,是整數類型
CloseEvent.reason: reason是斷開原因,是字符串
CloseEvent.wasClean: wasClean表示是否正常斷開,是布爾值。一般異常斷開時,該值為false
3. 關閉狀態碼表一般來說1006的錯誤碼出現的情況比較常見,該錯誤碼一般出現在斷網時。
狀態碼 | 名稱 | 描述 |
---|---|---|
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
5. 如何在老IE上使用原生WebSocket?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在正則表達式行為方面有點異常。
// 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("") }6. 參考
CloseEvent
getting the reason why websockets closed with close code 1006
Defined Status Codes
Upgrading HTTP to WebSocket
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94574.html
摘要:協議做不到服務器主動向客戶端推送信息。這種單向請求的特點,注定了如果服務器有連續的狀態變化,客戶端要獲知就非常麻煩。雙向通信,服務器可以向客戶端主動發送數據。數據格式比較輕量,性能開銷小,通信高效。 為什么需要 WebSocket? 因為個人對概念理解不是很深,文字表達能力不強,如果有關HTTP等方面描述不準確,歡迎糾正,謝謝大家 初次接觸 WebSocket 的人,都會問同樣的問題:...
摘要:簡介是一個一鍵配置工具,采用腳本語言編寫。支持自動配置環境,以前提供各種其它的配置工具,如自動配置配置等。網絡問題斷開安裝過程中由于網絡原因導致終端斷開,默認使用安裝,可以使用命令恢復終端。 簡介 ezhttp是一個Linux一鍵配置工具,采用bash腳本語言編寫。支持自動配置LAMP,LNMP,LNAMP環境,以前提供各種其它的配置工具,如自動配置swap,配置iptables等。項...
摘要:簡介是一個一鍵配置工具,采用腳本語言編寫。支持自動配置環境,以前提供各種其它的配置工具,如自動配置配置等。網絡問題斷開安裝過程中由于網絡原因導致終端斷開,默認使用安裝,可以使用命令恢復終端。 簡介 ezhttp是一個Linux一鍵配置工具,采用bash腳本語言編寫。支持自動配置LAMP,LNMP,LNAMP環境,以前提供各種其它的配置工具,如自動配置swap,配置iptables等。項...
摘要:當數據發生變化,便將數據發送給。與網絡應用中,兩個應用程序同時需要向對方發送消息的能力即全雙工通信,所利用到的技術就是,其能夠提供端對端的通信。其不僅支持,還支持許多種輪詢機制以及其他實時通信方式,并封裝了通用的接口。 WebSocket 與 Socket.IO 最近小組在做一個智慧交通的項目,其中有個 分享屏幕 的功能,即一個 client 能夠將自己當前的頁面分享到另外一個 cli...
摘要:與此同時,后端服務的中也有相關的長連接維持時長設置。如何快速的恢復連接根據上面的操作方案,我們會在網絡異常時斷開連接。 概述 通過前四篇博客,相信讀者對于WebSocket的使用和數據(不論是ArrayBuffer還是String)傳輸都有了一個深刻的了解。現在我們來介紹下,我在使用WebSocket時,連接相關模塊遇到的一些共性問題,以及我們如何解決這些問題。 本文作為WebSock...
閱讀 3078·2021-11-24 09:38
閱讀 1330·2021-09-22 15:27
閱讀 2968·2021-09-10 10:51
閱讀 1504·2021-09-09 09:33
閱讀 917·2021-08-09 13:47
閱讀 2072·2019-08-30 13:05
閱讀 892·2019-08-29 15:15
閱讀 2425·2019-08-29 12:21