WebSocket

特点:服务器可以主动想客户端推送信息,客户端也可以主动向服务器发送消息,所有浏览器都支持

  1. 建立在TCP协议上,服务端的实现比较容易
  2. 与HTTP协议有良好的兼容性
  3. 数据比较轻量级,性能开销小,通信高效
  4. 可以发送文本,可以发送二进制数据
  5. 没有同源策略,客户端可以与任意服务器通信
  6. 协议标识符为ws,如果加密是wss,服务器网址就是URL

客户端API

WebSocket对象作为一个构造函数,用于创建WebSocket实例

var ws = new WebSocket( ‘ws://localhost:3000’ )

执行这段语句后,客户端会与服务器进行连接

WebSocket.readyState

实例对象的当前状态,共四种

  • CONNECTING:值为0,表示正在连接
  • OPEN:值为1,表示连接成功,可以通信了
  • CLOSING:值为2,表示连接正在关闭
  • CLOSED:值为3,表示连接已经关闭,或者打开连接失败

WebSocket.onopen

实例对象的onopen属性,用于指定连接成功后的回调函数,如果要指定多个回调函数,可以使用addEventListener方法

ws.onopen=function(){}

 

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

WebSocket.onclose

实例对象的onclose属性,用于指定连接关闭后的回调函数

WebSocket.onmessage

实例对象的onmessage属性,用于指定收到服务器数据后的回调函数,event为服务器返回的数据对象

wx.onmessage=function(event){  var data = event.data }

 

服务器数据可能是文本,也可能是二进制数据(blob对象或者ArrayBuffer对象)

 

ws.binaryType返回连接所传输的二进制数据类型,返回值为字符串 ‘blob’或者’arraybuffer’

 

WebSocket.bufferedAmount

实例对象的buggeredAmount属性,表示多少字节的二进制数据没有发送出去,它可以用来判断发送是否结束

var data = new ArrayBuffer(10000000);

socket.send(data);

 

if (socket.bufferedAmount === 0) {

  // 发送完毕

} else {

  // 发送还没结束

}

 

WebSocket.onerror

实例对象的onerror属性,用于指定报错时的回调函数

WebSocket.send()

实例对象的send()方法用于向服务器发送数据数据

发送文本

ws.send(‘message’)

 

发送Blob对象的例子

var file = document.querySelect(‘ input[type=’file’] ’).file[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);

 

WebSocket.close()

实例对象的close()方法关闭WebSocket连接

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐