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

})

原文地址:https://www.cnblogs.com/wangpengfei8313/p/8316473.html