日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】WebSocket API总结

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】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

報告連接狀態???? ??????????????

? ? ? ? ? ? ? ? 特性常量 ? ? ? ? ? ? ? ? ??

? ? ? ? ?值 ? ? ? ? ?

狀態

WebSocket.CONNECTING

0

連接正在進行中,但還未建立

WebSocket.OPEN

1

連接已經建立。消息可以在客戶

WebSocket.CLOSING

2

連接正在進行關閉握手

WebSocket.CLOSED

3

連接已經關閉,不能打開

只讀

?

方法

描述

?

?

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总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。