摘要:閱讀原文把錯(cuò)誤打印出來(lái)斷開(kāi)的原因有很多,最好在斷開(kāi)時(shí),將錯(cuò)誤打印出來(lái)。的字段表示了斷開(kāi)的原因。有三個(gè)字段需要注意通過(guò)分析這三個(gè)字段,一般就可以找到斷開(kāi)原因是錯(cuò)誤碼,是整數(shù)類型是斷開(kāi)原因,是字符串表示是否正常斷開(kāi),是布爾值。
閱讀原文:https://wdd.js.org/websocket-...
1. 把錯(cuò)誤打印出來(lái)WebSocket斷開(kāi)的原因有很多,最好在WebSocket斷開(kāi)時(shí),將錯(cuò)誤打印出來(lái)。
在線demo地址:https://wdd.js.org/websocket-...
ws.onclose = function (e) { console.log("websocket 斷開(kāi): " + e.code + " " + e.reason + " " + e.wasClean) console.log(e) }
如果你想自己玩玩WebSocket, 但是你又不想自己部署一個(gè)WebSocket服務(wù)器,你可以使用ws = new WebSocket("wss://echo.websocket.org/"), 你向echo.websocket.org發(fā)送消息,它會(huì)回復(fù)你同樣的消息。2. 重要信息錯(cuò)誤狀態(tài)碼
WebSocket斷開(kāi)時(shí),會(huì)觸發(fā)CloseEvent, CloseEvent會(huì)在連接關(guān)閉時(shí)發(fā)送給使用 WebSockets 的客戶端. 它在 WebSocket 對(duì)象的 onclose 事件監(jiān)聽(tīng)器中使用。CloseEvent的code字段表示了WebSocket斷開(kāi)的原因??梢詮脑撟侄沃蟹治鰯嚅_(kāi)的原因。
CloseEvent有三個(gè)字段需要注意, 通過(guò)分析這三個(gè)字段,一般就可以找到斷開(kāi)原因
CloseEvent.code: code是錯(cuò)誤碼,是整數(shù)類型
CloseEvent.reason: reason是斷開(kāi)原因,是字符串
CloseEvent.wasClean: wasClean表示是否正常斷開(kāi),是布爾值。一般異常斷開(kāi)時(shí),該值為false
3. 關(guān)閉狀態(tài)碼表一般來(lái)說(shuō)1006的錯(cuò)誤碼出現(xiàn)的情況比較常見(jiàn),該錯(cuò)誤碼一般出現(xiàn)在斷網(wǎng)時(shí)。
狀態(tài)碼 | 名稱 | 描述 |
---|---|---|
0–999 | 保留段, 未使用. | |
1000 | CLOSE_NORMAL | 正常關(guān)閉; 無(wú)論為何目的而創(chuàng)建, 該鏈接都已成功完成任務(wù). |
1001 | CLOSE_GOING_AWAY | 終端離開(kāi), 可能因?yàn)榉?wù)端錯(cuò)誤, 也可能因?yàn)闉g覽器正從打開(kāi)連接的頁(yè)面跳轉(zhuǎn)離開(kāi). |
1002 | CLOSE_PROTOCOL_ERROR | 由于協(xié)議錯(cuò)誤而中斷連接. |
1003 | CLOSE_UNSUPPORTED | 由于接收到不允許的數(shù)據(jù)類型而斷開(kāi)連接 (如僅接收文本數(shù)據(jù)的終端接收到了二進(jìn)制數(shù)據(jù)). |
1004 | 保留. 其意義可能會(huì)在未來(lái)定義. | |
1005 | CLOSE_NO_STATUS | 保留. 表示沒(méi)有收到預(yù)期的狀態(tài)碼. |
1006 | CLOSE_ABNORMAL | 保留. 用于期望收到狀態(tài)碼時(shí)連接非正常關(guān)閉 (也就是說(shuō), 沒(méi)有發(fā)送關(guān)閉幀). |
1007 | Unsupported Data | 由于收到了格式不符的數(shù)據(jù)而斷開(kāi)連接 (如文本消息中包含了非 UTF-8 數(shù)據(jù)). |
1008 | Policy Violation | 由于收到不符合約定的數(shù)據(jù)而斷開(kāi)連接. 這是一個(gè)通用狀態(tài)碼, 用于不適合使用 1003 和 1009 狀態(tài)碼的場(chǎng)景. |
1009 | CLOSE_TOO_LARGE | 由于收到過(guò)大的數(shù)據(jù)幀而斷開(kāi)連接. |
1010 | Missing Extension | 客戶端期望服務(wù)器商定一個(gè)或多個(gè)拓展, 但服務(wù)器沒(méi)有處理, 因此客戶端斷開(kāi)連接. |
1011 | Internal Error | 客戶端由于遇到?jīng)]有預(yù)料的情況阻止其完成請(qǐng)求, 因此服務(wù)端斷開(kāi)連接. |
1012 | Service Restart | 服務(wù)器由于重啟而斷開(kāi)連接. |
1013 | Try Again Later | 服務(wù)器由于臨時(shí)原因斷開(kāi)連接, 如服務(wù)器過(guò)載因此斷開(kāi)一部分客戶端連接. |
1014 | 由 WebSocket標(biāo)準(zhǔn)保留以便未來(lái)使用. | |
1015 | TLS Handshake | 保留. 表示連接由于無(wú)法完成 TLS 握手而關(guān)閉 (例如無(wú)法驗(yàn)證服務(wù)器證書). |
1016–1999 | 由 WebSocket標(biāo)準(zhǔn)保留以便未來(lái)使用. | |
2000–2999 | 由 WebSocket拓展保留使用. | |
3000–3999 | 可以由庫(kù)或框架使用.? 不應(yīng)由應(yīng)用使用. 可以在 IANA 注冊(cè), 先到先得. | |
4000–4999 | 可以由應(yīng)用使用. |
如果你的服務(wù)所在的域是HTTPS的,那么使用的WebSocket協(xié)議也必須是wss, 而不能是ws
5. 如何在老IE上使用原生WebSocket?web-socket-js是基于flash的技術(shù),只需要引入兩個(gè)js文件和一個(gè)swf文件,就可以讓瀏覽器用于幾乎原生的WebSocket接口。另外,web-socket-js還是需要在ws服務(wù)端843端口做一個(gè)flash安全策略文件的服務(wù)。
我自己曾經(jīng)基于stompjs和web-socket-js,做WebSocket兼容到IE5, 當(dāng)然了stompjs在低版本的IE上有兼容性問(wèn)題, 而且stompjs已經(jīng)不再維護(hù)了,你可以使用我fork的一個(gè)版本,地址是:https://github.com/wangduandu...
主要是老版本IE在正則表達(dá)式行為方面有點(diǎn)異常。
// 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
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94574.html
摘要:協(xié)議做不到服務(wù)器主動(dòng)向客戶端推送信息。這種單向請(qǐng)求的特點(diǎn),注定了如果服務(wù)器有連續(xù)的狀態(tài)變化,客戶端要獲知就非常麻煩。雙向通信,服務(wù)器可以向客戶端主動(dòng)發(fā)送數(shù)據(jù)。數(shù)據(jù)格式比較輕量,性能開(kāi)銷小,通信高效。 為什么需要 WebSocket? 因?yàn)閭€(gè)人對(duì)概念理解不是很深,文字表達(dá)能力不強(qiáng),如果有關(guān)HTTP等方面描述不準(zhǔn)確,歡迎糾正,謝謝大家 初次接觸 WebSocket 的人,都會(huì)問(wèn)同樣的問(wèn)題:...
摘要:簡(jiǎn)介是一個(gè)一鍵配置工具,采用腳本語(yǔ)言編寫。支持自動(dòng)配置環(huán)境,以前提供各種其它的配置工具,如自動(dòng)配置配置等。網(wǎng)絡(luò)問(wèn)題斷開(kāi)安裝過(guò)程中由于網(wǎng)絡(luò)原因?qū)е陆K端斷開(kāi),默認(rèn)使用安裝,可以使用命令恢復(fù)終端。 簡(jiǎn)介 ezhttp是一個(gè)Linux一鍵配置工具,采用bash腳本語(yǔ)言編寫。支持自動(dòng)配置LAMP,LNMP,LNAMP環(huán)境,以前提供各種其它的配置工具,如自動(dòng)配置swap,配置iptables等。項(xiàng)...
摘要:簡(jiǎn)介是一個(gè)一鍵配置工具,采用腳本語(yǔ)言編寫。支持自動(dòng)配置環(huán)境,以前提供各種其它的配置工具,如自動(dòng)配置配置等。網(wǎng)絡(luò)問(wèn)題斷開(kāi)安裝過(guò)程中由于網(wǎng)絡(luò)原因?qū)е陆K端斷開(kāi),默認(rèn)使用安裝,可以使用命令恢復(fù)終端。 簡(jiǎn)介 ezhttp是一個(gè)Linux一鍵配置工具,采用bash腳本語(yǔ)言編寫。支持自動(dòng)配置LAMP,LNMP,LNAMP環(huán)境,以前提供各種其它的配置工具,如自動(dòng)配置swap,配置iptables等。項(xiàng)...
摘要:當(dāng)數(shù)據(jù)發(fā)生變化,便將數(shù)據(jù)發(fā)送給。與網(wǎng)絡(luò)應(yīng)用中,兩個(gè)應(yīng)用程序同時(shí)需要向?qū)Ψ桨l(fā)送消息的能力即全雙工通信,所利用到的技術(shù)就是,其能夠提供端對(duì)端的通信。其不僅支持,還支持許多種輪詢機(jī)制以及其他實(shí)時(shí)通信方式,并封裝了通用的接口。 WebSocket 與 Socket.IO 最近小組在做一個(gè)智慧交通的項(xiàng)目,其中有個(gè) 分享屏幕 的功能,即一個(gè) client 能夠?qū)⒆约寒?dāng)前的頁(yè)面分享到另外一個(gè) cli...
摘要:與此同時(shí),后端服務(wù)的中也有相關(guān)的長(zhǎng)連接維持時(shí)長(zhǎng)設(shè)置。如何快速的恢復(fù)連接根據(jù)上面的操作方案,我們會(huì)在網(wǎng)絡(luò)異常時(shí)斷開(kāi)連接。 概述 通過(guò)前四篇博客,相信讀者對(duì)于WebSocket的使用和數(shù)據(jù)(不論是ArrayBuffer還是String)傳輸都有了一個(gè)深刻的了解?,F(xiàn)在我們來(lái)介紹下,我在使用WebSocket時(shí),連接相關(guān)模塊遇到的一些共性問(wèn)題,以及我們?nèi)绾谓鉀Q這些問(wèn)題。 本文作為WebSock...
閱讀 3092·2021-11-24 09:38
閱讀 1343·2021-09-22 15:27
閱讀 2979·2021-09-10 10:51
閱讀 1516·2021-09-09 09:33
閱讀 928·2021-08-09 13:47
閱讀 2094·2019-08-30 13:05
閱讀 901·2019-08-29 15:15
閱讀 2437·2019-08-29 12:21