WebSocket API
本章節介紹一下WebSocket中常用的一些方法和屬性。
首先看一個程式碼片段:
[JavaScript] 純文字檢視 複製程式碼var ws = new WebSocket('ws://localhost:8181'); ws.onopen = function(evt) { console.log('連線成功'); ws.send('螞蟻部落'); }; ws.onmessage = function(evt) { console.log('接收到資訊: ' + evt.data); ws.close(); }; ws.onclose = function(evt) { console.log('連線關閉'); };
上面程式碼是WebSocket應用的程式碼片段,通過它可以直觀的感受一下。
一.建構函式:
通過WebSocket建構函式建立一個WebSocket物件例項:
[JavaScript] 純文字檢視 複製程式碼var ws = new WebSocket('ws://localhost:8181');
執行上面的程式碼,客戶端就與伺服器進行連線動作。
二.readyState:
此屬性返回WebSocket物件例項的當前狀態:
(1).CONNECTING:值為0,表示正在連線。
(2).OPEN:值為1,表示連線成功,可以通訊了。
(3).CLOSING:值為2,表示連線正在關閉。
(4).CLOSED:值為3,表示連線已經關閉,或者開啟連線失敗。
程式碼片段如下:
[JavaScript] 純文字檢視 複製程式碼switch (ws.readyState) { case WebSocket.CONNECTING: // 程式碼 break; case WebSocket.OPEN: // 程式碼 break; case WebSocket.CLOSING: // 程式碼 break; case WebSocket.CLOSED: // 程式碼 break; default: // 此程式碼不會執行,因為只存在上述四種狀態 break; }
三.open事件:
連線成功後觸發此事件:
[JavaScript] 純文字檢視 複製程式碼ws.onopen = function(evt) { console.log('連線成功'); ws.send('螞蟻部落'); };
四.message事件:
接收到伺服器發來的資訊觸發此事件:
[JavaScript] 純文字檢視 複製程式碼ws.onmessage = function(evt) { console.log('接收到資訊: ' + evt.data); ws.close(); };
事件物件的data獲取從伺服器端傳送而來的資料,資料可能是文字,也可能是二進位制資料。
使用binaryType屬性,顯式指定收到的二進位制資料型別:
[JavaScript] 純文字檢視 複製程式碼// 收到的是 blob 資料 ws.binaryType = "blob"; ws.onmessage = function(e) { console.log(e.data.size); }; // 收到的是 ArrayBuffer 資料 ws.binaryType = "arraybuffer"; ws.onmessage = function(e) { console.log(e.data.byteLength); };
五.close事件:
連線關閉關閉觸發此事件:
[JavaScript] 純文字檢視 複製程式碼ws.onclose = function(event) { var code = event.code; var reason = event.reason; var wasClean = event.wasClean; // code };
六.error事件:
出現連線、處理、接收、傳送資料失敗的時候就會觸發error事件:
[JavaScript] 純文字檢視 複製程式碼socket.onerror = function(evt) { // code };
七.send()方法:
WebSocket例項物件的send()方法可以向伺服器傳送資料:
[JavaScript] 純文字檢視 複製程式碼ws.onopen = function(evt) { console.log('連線成功'); ws.send('螞蟻部落'); };
上面的程式碼是傳送普通的字串。
[JavaScript] 純文字檢視 複製程式碼let inputFile = document.querySelector('input[type="file"]'); let file=inputFile.files[0]; ws.send(file);
上面的程式碼是傳送普通的字串。
[JavaScript] 純文字檢視 複製程式碼let inputFile = document.querySelector('input[type="file"]'); let file=inputFile.files[0]; ws.send(file);
上面的程式碼傳送Blob物件。
[JavaScript] 純文字檢視 複製程式碼let img = canvas_context.getImageData(0, 0, 200, 100); let binary = new Uint8Array(img.data.length); for (let i = 0; i < img.data.length; i++) { binary[i] = img.data[i]; } ws.send(binary.buffer);
上面的程式碼傳送ArrayBuffer物件。
(1).關於getImageData()參閱canvas getImageData()一章節。
(2).關於Uint8Array參閱JavaScript TypedArray 檢視一章節。
八.bufferedAmount屬性:
WebSocket物件例項的bufferedAmount屬性可以返回一個數字,用來表示還有多少位元組的二進位制資料沒有傳送出去。它可以用來判斷髮送是否結束,程式碼例項:
[JavaScript] 純文字檢視 複製程式碼var data = new ArrayBuffer(18800000); socket.send(data); if (socket.bufferedAmount === 0) { // 已經傳送完畢 } else { // 尚未傳送完畢 }
上面程式碼同樣非常的簡單,不再多做介紹,至此本文完結。
相關文章
- Spring Framework 參考文件(WebSocket API)SpringFrameworkWebAPI
- WebSocketWeb
- 【譯】WebSocket協議第三章——WebSocket網址(WebSocket URIs)Web協議
- WebSocket的故事(一)—— WebSocket的由來Web
- 深入淺出Websocket(一)Websocket協議Web協議
- WebSocket 用法Web
- WebSocket 握手Web
- go websocketGoWeb
- FastAPI WebSocketASTAPIWeb
- 初探websocketWeb
- WebSocket 教程Web
- Golang 官方認可的 websocket 庫-gorilla/websocketGolangWeb
- WebSocket於HTTP 、WebSocket與Socket的區別WebHTTP
- WebSocket原理與實踐(二)---WebSocket協議Web協議
- 深入淺出Websocket(二)分散式Websocket叢集Web分散式
- Sanic WebSocket 使用Web
- WebSocket 入門Web
- websocket及延展Web
- websocket使用(vue)WebVue
- 簡說websocketWeb
- webSocket筆記Web筆記
- websocket初次使用Web
- WebSocket簡介Web
- go websocket心跳GoWeb
- WebSocket探祕Web
- websocket封裝Web封裝
- Java-WebSocketJavaWeb
- WebSocket協議Web協議
- nginx代理websocketNginxWeb
- nginx 代理websocketNginxWeb
- 淺談WebSocketWeb
- websocket連線Web
- 手摸手教你使用WebSocket[其實WebSocket也不難]Web
- 學習WebSocket(一):Spring WebSocket的簡單使用WebSpring
- 基於WebSocket的modbus通訊(三)- websocket和串列埠Web串列埠
- 簡單聊聊WebSocketWeb
- 前端WebSocket詳解前端Web
- websocket通訊原理Web