【转】WebSocket API总结
NCU.卓越141.chenyuchao
一、檢查?WebSocket?支持
var?host =?"ws://localhost:8080/mychat";
?var?ws;
if?('WebSocket'?in?window) {
ws =?new?WebSocket(host);
}?else?if?('MozWebSocket'?in?window) {
ws =?new?MozWebSocket(host);
}?else?{
window.alert("瀏覽器不支持WebSocket");
return;
}
?
說明構造函數 ??var?ws =?new?WebSocket(url,[protocols]);
| url | ws(或wss)://ip:port/uri? wss是WebSocketSecure縮寫 |
| Protocols(可選) | 可以使用的子協議包括?XMPP(可擴展息處理現場協議)、SOAP( 簡單對象訪問協議)或者自定義協議 |
| 函數異常 | SECURITY_ERR 正在嘗試連接的端口被阻止。 |
| WebSocket的瀏覽器支持 Chrome for Android57+?? Chrome16+????iOS Safari6.0+??? UC Browser for Android11.4+??? Firefox11+??? IE10+ Samsung Internet 4+???Opera Mini None????Safari7+?????Android Browser4.4+?????Edge12+??????Opera12.1+ | |
?
二、WebSocket?屬性和方法
| ? ?屬性 ? ?? | 類型 | 描述 | |||||||||||||||
| ? onopen | ? EventListener | 服務器響應了WebSocket連接請求,open事件觸發并建立了一個連接 ws.onopen =?function?() { ?? ?console.log(ws); }; | |||||||||||||||
| ? ? ? ? ? ? ? onmessage | ? ? ? ? ? ? ? EventListener | 1、接收到來自服務器的數據 //接收文本消息并顯示消息內容 ws.onmessage =?function?(e) { ??? console.log(e.data); }; 2、WebSocket還可以處理二進制數據,這種數據作為Blob消息或者ArrayBuffer消息。因為設置WebSocket消息二進制數據類型的應用會影響二進制消息,所以必須在讀取數據之前決定用于客戶端的二進制數據的類型 ws.binaryType =?"blob"; ws.onmessage =?function(e) { if?(e.data?instanceof?Blob) { console.log("Blob", e.data); ???????????var?blob =?new?Blob(e.data); ????? } }; ? ws.binaryType =?"arraybuffer"; ws.onmessage =?function(e) { ?? ???if?(e.data?instanceof?ArrayBuffer) { ??????? ?console.log("ArrayBuffer", +e.data); ??????? ?var?a =?new?Uint8Array(e.data); ????? } }; | |||||||||||||||
| ? onerror | ? EventListener | 響應意外故障的時候觸發,如果你接收一個 error 事件,可以預期很快就會觸發 close 事件。error事件處理程序是調用服務器重連邏輯以及處理來自 WebSocket 對象的異常的最佳場所。 ws.onerror =?function(e) { ?? ?console.log(e); }; | |||||||||||||||
| ? ? onclose | ? ? EventListener | 在WebSocket連接關閉時觸發 /* * close?事件有?3?個有用的屬性(property),可以用于錯誤處理和恢復 * e.wasClean???布爾屬性,表示連接是否順利關閉 * e.code??????表示服務器發送的關閉握手狀態 * e.reason * */ ws.onclose =?function(e) { ?? ? console.log(e); }; | |||||||||||||||
| url | ? | 由構造函數解析的URL。這是一個絕對的URL?????? ?只讀 | |||||||||||||||
| binaryType | DOMString | 指示由連接發送的二進制數據的類型的字符串 | |||||||||||||||
| bufferedAmount | unsigned long | 瀏覽器將為你的客戶端應用程序緩存出站數據,從而使你可 以隨時調用 send(),發送任意數量的數據。可以使用 bufferedAmount 特性檢查已經進入隊列,但是尚未發送到服務器的字節數。??????????????????????????????????只讀 | |||||||||||||||
| extensions | DOMString | 服務器選擇的擴展 | |||||||||||||||
| protocol | DOMString | 指示服務器選擇的子協議的名稱的字符串;?這將是protocols創建WebSocket對象時在參數中指定的字符串之一。 | |||||||||||||||
| ? ? readyState | ? ? ? unsigned short | 報告連接狀態???? ??????????????
只讀 |
?
| 方法 | 描述 |
| ? ? send() | 連接打開時發送數據 function?myEventHandler(data) { ???if?(ws.readyState === WebSocket.OPEN) { ????? ??? ws.send(data); ?? }?else?{ ??????// Do something else in this case. ?? } } |
| ? ? ? ? close(code,reason) | 關閉連接。 參數說明 code?可選的 指示狀態代碼的數字值,解釋連接正在關閉的原因。如果未指定此參數,則假定默認值為1000(表示正常的“事務完成”關閉)。 ? reason?可選的 一個人類可讀的字符串,解釋連接正在關閉的原因。該字符串必須不超過123個字節的UTF-8文本(不是字符)。 例:?ws.close(1000,"正常關閉"); 拋出異常 INVALID_ACCESS_ERR code指定了無效。 SYNTAX_ERR 該reason字符串過長或包含不成對替代品。 |
| code附錄 1000????????? 正常關閉?????? 當你的會話成功完成時發送這個代碼 1001????????? 離開?????????? 因應用程序離開且不期望后續的連接嘗試而關閉連接時,發送這一代碼。服務器可能關閉,或者客戶端應用程序可能關閉 1002????????? 協議錯誤?????? 當因協議錯誤而關閉連接時發送這一代碼 1003???? 不可接受的數據類型? 當應用程序接收到一條無法處理的意外類型消息時發送這一代碼 1004????????? 保留?????????? 不要發送這一代碼。根據 RFC 6455,這個狀態碼保留,可能在未來定義 1005????????? 保留?????????? 不要發送這一代碼。WebSocket API 用這個代碼表示沒有接收到任何代碼 1006 ?????????保留 ??????????不要發送這一代碼。WebSocket API 用這個代碼表示連接異常關閉 1007 ?????????無效數據 ??????在接收一個格式與消息類型不匹配的消息之后發送這一代碼。如果文本消息包含錯誤格式的 UTF-8 數據,連接應該用這個代碼關閉 1008 ?????????消息違反政策 ???當應用程序由于其他代碼所不包含的原因終止連接,或者不希望泄露消息無法處理的原因時,發送這一代碼 1009????????? 消息過大??? ????當接收的消息太大,應用程序無法處理時發送這一代碼(記住,幀的載荷長度最多為64 字節。即使你有一個大服務器,有些消息 也仍然太大。) 1010????????? 需要擴展??????? 當應用程序需要一個或者多個服務器無法協商的特殊擴展時,從客戶端(瀏覽器)發送這一代碼 1011????????? 意外情況?????? 當應用程序由于不可預見的原因,無法繼續處理連接時,發送這一代碼 1015????? TLS失敗(保留) 不要發送這個代碼。WebSocket API 用這個代碼表示 TLS 在 WebSocket 握手之前失敗。 0 ~ 999??????? 禁止????????????? 1000 以下的代碼是無效的,不能用于任何目的 1000 ~ 2999??? 保留????????????? 這些代碼保留以用于擴展和 WebSocket 協議的修訂版本。按照標準規定使用這些代碼,參見表 3-4 3000 ~ 3999?? 需要注冊????????? 這些代碼用于“程序庫、框架和應用程序”。這些代碼應該在 IANA(互聯網編號分配機構)公開注冊 4000 ~ 4999?? 私有????????? ???在應用程序中將這些代碼用于自定義用途。因為它們沒有注冊,所以不要期望它們能被其他 WebSocket廣泛理解 | |
?
總結
以上是生活随笔為你收集整理的【转】WebSocket API总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 投资遇到“黑天鹅”事件怎么办?掌握好这三
- 下一篇: 【转】The underlying co