webSocket是什么?


webSocket是H5的新協議,基於tcp協議,實現瀏覽器與客戶端的雙工通信。解決了http協議只能由客戶端向服務發送請求的弊端,替代長輪詢節省帶寬和資源。(多於見聊天室)

一、客戶端示例

var ws=new webSocket("ws://echo.webSocket.org");

ws.open =function(event){

  console.log("connection open");

  ws.send("Hello webSocket")

}

ws.onmessage=function(event){

  ws.close()

}

ws.onclose=function(event){

  console.log("connection closed")

}

二、客戶端的API

2.1webSocket構造函數

webSocket對象作為一個構造函數,用於新建webSocket實例

var ws=webSocket(“ws://localhost:8080”);客戶端與服務器進行鏈接

2.2webSocket.readyState屬性返回實例對象的狀態:4

CONNECTING:值為0,表示正在連接

OPEN:值為1,表示連接成功,可以通信了

CLOSING:值為2,表示連接正在關閉

CLOSED:值為3,表示連接已關閉,或者打開連接失敗

switchws.readyState{

case webSocket.connecting : //do something

  break;

case webSocket.open://do something

break;

case webSocket.closing://do something

  break;

case webSocket.closed://do something

break;

Default://do something

  break;

}

2.3webSocket.onopen屬性,用於指定連接成功后的回調函數

 ws.onopen=function(){

ws.send(‘Hello Server’);

}

指定多個回調函數方法:

ws.addEventListener(‘open’,function(event){

ws.send(“Hello server”)

});

2.4webSocket.onclose屬性,用於指定鏈接關閉后的回調函數

ws.onclose=function(event){

var code=event.code;

var reason=event.resson;

var wasClean=event.wasClean;

}

ws.addEventListener("close", function(event) {

  var code = event.code;

  var reason = event.reason;

  var wasClean = event.wasClean;

 });

2.5webSocket.onmessage屬性,用於指定收到服務器數據后的回調函數

ws.onmessage = function(event) {

  var data = event.data;

  };

 

ws.addEventListener("message", function(event) {

  var data = event.data;

 });

注意:服務器數據可能是文本,也可能是二進制數據(blob對象或者Arraybuffer

ws.onmessage = function(event){

  if(typeof event.data === String) {

    console.log("Received data string");

  }

 

  if(event.data instanceof ArrayBuffer){

    var buffer = event.data;

    console.log("Received arraybuffer");

  }}

還可以用binaryType屬性,顯示指定收到的二進制數據類型

// 收到的是 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);

};

2.6webSocket.send()用於向服務器發送數據

ws.send(“yours message”)

發送blob對象的例子

var file=document.querySelector(‘input[type=”file”]’).files[0];

ws.send(file);

發送 ArrayBuffer 對象的例子。

var img=canvas_context.getImageData(0,0,400,320);

var binary = new Uint8Array(img.data.length);

for (var i = 0; i < img.data.length; i++) {

  binary[i] = img.data[i];

}

ws.send(binary.buffer);

2.7webSocket.bufferedAmount屬性表示有多少二進制的數據沒有發出去,可以用來判斷發送是否結束

var data=new Arraybuffer(10000);

webSocket.send(data);

If(websocket.bufferedAmount===0){

//發送完畢

}else{

//發送未結束

}

2.8webSocket.onerror屬性,用於指定報錯時的回調函數

webSocket.onerror=function(){

//handle error event

}

webSocket.addEventListener (“error”,function(event){

//handle error event

})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM