国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

WebSocket的使用方法(JS前端)

這篇具有很好參考價值的文章主要介紹了WebSocket的使用方法(JS前端)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

先來一個常用例子

// WebSocket構(gòu)造函數(shù),創(chuàng)建WebSocket對象
let ws = new WebSocket('ws://localhost:8888')

// 連接成功后的回調(diào)函數(shù)
ws.onopen = function (params) {
  console.log('客戶端連接成功')
  // 向服務(wù)器發(fā)送消息
  ws.send('hello')
};

// 從服務(wù)器接受到信息時的回調(diào)函數(shù)
ws.onmessage = function (e) {
  console.log('收到服務(wù)器響應(yīng)', e.data)
};

// 連接關(guān)閉后的回調(diào)函數(shù)
ws.onclose = function(evt) {
  console.log("關(guān)閉客戶端連接");
};

// 連接失敗后的回調(diào)函數(shù)
ws.onerror = function (evt) {
  console.log("連接失敗了");
};


// 監(jiān)聽窗口關(guān)閉事件,當(dāng)窗口關(guān)閉時,主動去關(guān)閉websocket連接,防止連接還沒斷開就關(guān)閉窗口,這樣服務(wù)端會拋異常。
window.onbeforeunload = function() {
    ws.close();
}  

封裝的代碼
上面的代碼就夠用,也可以查看我封裝好的 WebSocket 代碼(包括心跳機(jī)制):點(diǎn)擊查看

下面詳細(xì)說明常用的屬性和方法

更全面的官網(wǎng)的文檔可以去這里看:點(diǎn)擊查看

下面是我總結(jié)的內(nèi)容

WebSocket
WebSocket 對象提供了用于創(chuàng)建和管理 WebSocket 連接,以及可以通過該連接發(fā)送和接收數(shù)據(jù)的 API。

var ws= new WebSocket(url, protocols);

參數(shù)

url:要連接的 URL;這應(yīng)該是 WebSocket 服務(wù)器將響應(yīng)的 URL。
protocols(可選):一個協(xié)議字符串或者一個包含協(xié)議字符串的數(shù)組。這些字符串用于指定子協(xié)議,這樣單個服務(wù)器可以實(shí)現(xiàn)多個 WebSocket 子協(xié)議(可以通過一臺服務(wù)器根據(jù)指定的協(xié)議(protocol)處理不同類型的交互)。如果不指定協(xié)議字符串,則假定為空字符串。

屬性

1. readyState 屬性返回實(shí)例對象的當(dāng)前狀態(tài)

CONNECTING:值為0,表示正在連接。
OPEN:值為1,表示連接成功,可以通信。
CLOSING:值為2,表示連接正在關(guān)閉。
CLOSED:值為3,表示連接已經(jīng)關(guān)閉,或者打開連接失敗。

示例

switch (ws.readyState) {
  case WebSocket.CONNECTING:	// 也可以用0
    // do something
    break;
  case WebSocket.OPEN:			// 也可以用1
    // do something
    break;
  case WebSocket.CLOSING:		// 也可以用2
    // do something
    break;
  case WebSocket.CLOSED:		// 也可以用3
    // do something
    break;
  default:
    // this never happens
    break;
}

2. onopen 連接成功后的回調(diào)函數(shù)
當(dāng)WebSocket 的連接狀態(tài)readyState 變?yōu)?code>1時調(diào)用,這意味著當(dāng)前連接已經(jīng)準(zhǔn)備好發(fā)送和接受數(shù)據(jù)。

使用方法

ws.onopen = function () {
  ws.send('Hello Server!');
}

或者

ws.addEventListener('open', function (event) {
  ws.send('Hello Server!');
});

3. onmessage 從服務(wù)器接受到信息時的回調(diào)函數(shù)
message 事件會在 WebSocket 接收到新消息時被觸發(fā)

使用方法

ws.onmessage = function(event) {
  // 接收到的數(shù)據(jù)
  var data = event.data;
  // 其他代碼
};

或者

ws.addEventListener("message", function(event) {
  // 接收到的數(shù)據(jù)
  var data = event.data;
  // 其他代碼
});

注意:服務(wù)器推送的數(shù)據(jù)可能有多種格式,需要我們動態(tài)判斷,也可以通過 binaryType 屬性設(shè)置

判斷 / 設(shè)置 數(shù)據(jù)格式

// 判斷
ws.onmessage = function(event){
  if(typeof event.data === String) {
    console.log("返回?cái)?shù)據(jù)是字符串");
  }
}

// binaryType 屬性設(shè)置
ws.binaryType = "arraybuffer";
ws.onmessage = function(e) {
  // 收到的是 ArrayBuffer 數(shù)據(jù)
  console.log(e.data.byteLength);
};

4. onclose 連接關(guān)閉后的回調(diào)函數(shù)
oncloseWebSocket 連接的readyState 變?yōu)?CLOSED3時被調(diào)用,它接收一個名字為closeCloseEvent 事件

使用方法

ws.onclose = function(event) {
  var code = event.code;			// 表示服務(wù)端發(fā)送的關(guān)閉碼
  var reason = event.reason;		// 表示服務(wù)器關(guān)閉連接的原因
  var wasClean = event.wasClean;	// 表示連接是否完全關(guān)閉
  // 其他代碼
};

或者

ws.addEventListener("close", function(event) {
  var code = event.code;			// 表示服務(wù)端發(fā)送的關(guān)閉碼
  var reason = event.reason;		// 表示服務(wù)器關(guān)閉連接的原因
  var wasClean = event.wasClean;	// 表示連接是否完全關(guān)閉
  // 其他代碼
});

關(guān)閉碼對照表:點(diǎn)擊查看

5. onerror 連接失敗后的回調(diào)函數(shù)
當(dāng)websocket的連接由于一些錯誤事件的發(fā)生 (例如無法發(fā)送一些數(shù)據(jù)) 而被關(guān)閉時,一個error事件將被引發(fā)。

使用方法

ws.onerror = function(event) {
  console.log('連接錯誤: ', event);
};

或者

ws.addEventListener('error', function (event) {
  console.log('連接錯誤: ', event);
});

6. bufferedAmount 未發(fā)送至服務(wù)器的字節(jié)數(shù)
bufferedAmount是一個只讀屬性,用于返回已經(jīng)被send()方法放入隊(duì)列中但還沒有被發(fā)送到網(wǎng)絡(luò)中的數(shù)據(jù)的字節(jié)數(shù)。一旦隊(duì)列中的所有數(shù)據(jù)被發(fā)送至網(wǎng)絡(luò),則該屬性值將被重置為 0。但是,若在發(fā)送過程中連接被關(guān)閉,則屬性值不會重置為 0。如果你不斷地調(diào)用send(),則該屬性值會持續(xù)增長。

使用方法

// 創(chuàng)建數(shù)據(jù)
var data = new ArrayBuffer(10000000);
// 發(fā)送數(shù)據(jù)
ws.send(data);

// 判斷數(shù)據(jù)是否
if (socket.bufferedAmount === 0) {
  // 數(shù)據(jù)發(fā)送完成
} else {
  // 還有數(shù)據(jù)未發(fā)送完成
}

方法

1. send() 對要傳輸?shù)臄?shù)據(jù)進(jìn)行排隊(duì)
send() 方法將需要通過 WebSocket 鏈接傳輸至服務(wù)器的數(shù)據(jù)排入隊(duì)列,并根據(jù)所需要傳輸?shù)?data bytes 的大小來增加 bufferedAmount 的值。若數(shù)據(jù)無法傳輸(例如數(shù)據(jù)需要緩存而緩沖區(qū)已滿)時,套接字會自行關(guān)閉。

使用方法

ws.send('your message');

注意:用于傳輸至服務(wù)器的數(shù)據(jù)。它必須是以下類型之一:

USVString:文本字符串。字符串將以 UTF-8 格式添加到緩沖區(qū),并且 bufferedAmount 將加上該字符串以 UTF-8 格式編碼時的字節(jié)數(shù)的值。
ArrayBuffer:您可以使用一有類型的數(shù)組對象發(fā)送底層二進(jìn)制數(shù)據(jù);其二進(jìn)制數(shù)據(jù)內(nèi)存將被緩存于緩沖區(qū),bufferedAmount 將加上所需字節(jié)數(shù)的值。
Blob:Blob 類型將隊(duì)列 blob 中的原始數(shù)據(jù)以二進(jìn)制中傳輸。 bufferedAmount 將加上原始數(shù)據(jù)的字節(jié)數(shù)的值。
ArrayBufferView:您可以以二進(jìn)制幀的形式發(fā)送任何 JavaScript 類數(shù)組對象 ;其二進(jìn)制數(shù)據(jù)內(nèi)容將被隊(duì)列于緩沖區(qū)中。值 bufferedAmount 將加上必要字節(jié)數(shù)的值。

2. close() 關(guān)閉當(dāng)前鏈接
close() 方法關(guān)閉 WebSocket 連接或連接嘗試(如果有的話)。如果連接已經(jīng)關(guān)閉,則此方法不執(zhí)行任何操作。

使用方法

// WebSocket.close(code, reason)
ws.close();

參數(shù):

code(可選):一個數(shù)字狀態(tài)碼,它解釋了連接關(guān)閉的原因。如果沒有傳這個參數(shù),默認(rèn)使用 1005。
reason(可選):一個人類可讀的字符串,它解釋了連接關(guān)閉的原因。這個 UTF-8 編碼的字符串不能超過 123 個字節(jié)。

數(shù)字狀態(tài)碼對照表:點(diǎn)擊查看

到這里就結(jié)束了,根據(jù)需求使用就可以了。

WebSocket心跳機(jī)制/保持連接的內(nèi)容,請看我的其他文章(里面有封裝好的 WebSocket 方法,可以直接使用):點(diǎn)擊查看文章來源地址http://www.zghlxwxcb.cn/news/detail-782892.html

到了這里,關(guān)于WebSocket的使用方法(JS前端)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python-Websocket的介紹及使用方法

    Python-Websocket的介紹及使用方法

    ?????? 哈嘍!大家好,我是【太陽打傘】,一位熱愛分享各種技術(shù)的博主!?????? ?【太陽打傘】的創(chuàng)作宗旨:每一條命令都親自執(zhí)行過,每一行代碼都實(shí)際運(yùn)行過,每一種方法都真實(shí)實(shí)踐過,每一篇文章都良心制作過。??? ?【太陽打傘】的博客中所有涉及命令、

    2023年04月15日
    瀏覽(18)
  • Android中okhttp的websocket的詳細(xì)使用方法(加斷線重連)

    介紹之類的就不多講了,懶得講也未必有別人整理的清晰,直接上代碼 使用:

    2024年02月15日
    瀏覽(26)
  • Unity3D WebGL平臺使用WebSocket通信的方法和示例

    Unity3D WebGL平臺使用WebSocket通信的方法和示例

    ? ? ? 之前在WebGL平臺和服務(wù)端交互的時候使用的是UnityWebRequest,通過WebAPI的方式進(jìn)行交互,后來發(fā)現(xiàn)可以用WebSocket交互后就果斷換了WebSocket。 一、Unity3D客戶端 我在Unity端使用的是 NativeWebSocket NativeWebSocket下載地址 直接導(dǎo)入Unity即可, 下面是適配的代碼,直接掛載在GameObject。

    2024年02月11日
    瀏覽(26)
  • Unity使用webSocket與服務(wù)器通信(二)——C#服務(wù)器端使用Fleck時的簡單服用方法

    Unity使用webSocket與服務(wù)器通信(二)——C#服務(wù)器端使用Fleck時的簡單服用方法

    C#服務(wù)端用到Fleck包,它包含哪些可用的回調(diào)函數(shù),有哪些常用的api方法? 演示:服務(wù)端收到Unity用戶發(fā)來的信息 Fleck提供的回調(diào)函數(shù)有下面幾種: 其它常用的api主要有: ping pong的作用是啥? WebSocket為了保持客戶端、服務(wù)端的實(shí)時雙向通信,需要確??蛻舳恕⒎?wù)端之間的

    2024年02月08日
    瀏覽(20)
  • 前端創(chuàng)建WebSocket時報錯,怎么捕獲異常

    Uncaught DOMException: Failed to construct ‘WebSocket’: The URL ‘XXX’ is invalid. 前端new WebSocket();時報錯 搜了半天兩種說法: 1.在onerror的回調(diào)中捕獲 2.設(shè)計(jì)缺陷,捕獲不了 第一種說法明顯不可以,這是創(chuàng)建時出錯,這時WebSocket對象還沒有創(chuàng)建成功,它哪里來的onerror 方法 這里我利用prox

    2024年02月12日
    瀏覽(18)
  • WebSocket心跳機(jī)制/服務(wù)器端開連接(JS前端)

    情景: 前端使用 WebSocket 的時候,后端長時間沒有推送數(shù)據(jù),導(dǎo)致 WebSocket 連接經(jīng)常斷開,后端也會報錯。 解決方法: 通過 心跳機(jī)制 讓前端和后端始終保持連接。 代碼: 使用方法: 注意: 后端收到以后需要給前端返回?cái)?shù)據(jù),否則還是無法保持連接 代碼參考了:https://bl

    2024年02月12日
    瀏覽(28)
  • 【W(wǎng)ebSocket】前端使用WebSocket實(shí)時通信

    【W(wǎng)ebSocket】前端使用WebSocket實(shí)時通信

    最近寫項(xiàng)目,需要實(shí)現(xiàn)消息通知和實(shí)時聊天的功能,就去了解了一些關(guān)于websocket的知識,總結(jié)如下。 WebSocket 是一種在 Web 應(yīng)用中實(shí)現(xiàn)實(shí)時通信的協(xié)議。與傳統(tǒng)的 HTTP 請求不同,WebSocket 連接在客戶端和服務(wù)器之間建立一個 持久性 的 雙向通信管道 ,使得數(shù)據(jù)可以在連接打開后

    2024年02月11日
    瀏覽(23)
  • SpringBoot整合Websocket(Java websocket怎么使用)

    SpringBoot整合Websocket(Java websocket怎么使用)

    WebSocket 是一種基于 TCP 協(xié)議的全雙工通信協(xié)議,可以在瀏覽器和服務(wù)器之間建立 實(shí)時、雙向的數(shù)據(jù)通信 ??梢杂糜谠诰€聊天、在線游戲、實(shí)時數(shù)據(jù)展示等場景。與傳統(tǒng)的 HTTP 協(xié)議不同,WebSocket 可以保持 長連接 ,實(shí)時傳輸數(shù)據(jù),避免了頻繁的 HTTP 請求和響應(yīng),節(jié)省了網(wǎng)絡(luò)帶

    2024年02月10日
    瀏覽(20)
  • 自動化測試工具Selenium的基本使用方法,面試字節(jié)跳動的前端工程師該怎么準(zhǔn)備

    自動化測試工具Selenium的基本使用方法,面試字節(jié)跳動的前端工程師該怎么準(zhǔn)備

    8.小結(jié) 上述均可以改寫成find_element(By.ID,‘kw’)的形式 find_elements_by_xxx的形式是查找到多個元素,結(jié)果為列表 import time from selenium import webdriver#驅(qū)動瀏覽器 from selenium.webdriver import ActionChains #滑動 from selenium.webdriver.common.by import By #選擇器 from selenium.webdriver.common.by import By #按照什

    2024年04月16日
    瀏覽(25)
  • js中使用websocket

    js中使用websocket

    ?后端地址是http的? ?websocket地址 ws開頭;后端地址是https的,websocket地址wss開頭; 對于websocket沒有跨域的問題 注意:系統(tǒng)退出后需要關(guān)閉websocket,尤其是平臺需要單賬號登陸的。

    2024年02月11日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包