websocket

 特点

 

  • 服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话
  • 建立在 TCP 协议之上,服务器端的实现比较容易。
  • 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
  • 数据格式比较轻量,性能开销小,通信高效
  • 可以发送文本,也可以发送二进制数据。
  • 没有同源限制,客户端可以与任意服务器通信。
  • 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

 

API

  • 新建websocket实例
var ws = new WebSocket('ws://localhost:8080');
  • readyState 返回实例对象的当前状态
  1. CONNECTING:值为0,表示正在连接。
  2. OPEN:值为1,表示连接成功,可以通信了。
  3. CLOSING:值为2,表示连接正在关闭。
  4. CLOSED:值为3,表示连接已经关闭,或者打开连接失败。
switch (ws.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:
    // this never happens
    break;
}
  • onopen 用于指定连接成功后的回调函数。
ws.onopen = function () {
    ws.send('Hello Server!');
}
// 如果要指定多个回调函数,可以使用addEventListener方法。
ws.addEventListener('open', function (event) {
    ws.send('Hello Server!');
});
  • onclose属性,用于指定连接关闭后的回调函数。
ws.onclose = function(event) {
    var code = event.code;
    var reason = event.reason;
    var wasClean = event.wasClean;
    // handle close event
};
ws.addEventListener("close", function(event) {
    var code = event.code;
    var reason = event.reason;
    var wasClean = event.wasClean;
    // handle close event
});
  • onmessage属性,用于指定收到服务器数据后的回调函数。
ws.onmessage = function(event) {
    var data = event.data;
    // 处理数据
};
    
ws.addEventListener("message", function(event) {
    var data = event.data;
    // 处理数据
});

 

  • send 法用于向服务器发送数据
ws.send('your message');
  • onerror属性,用于指定报错时的回调函数。
socket.onerror = function(event) {
    // handle error event
};
    
socket.addEventListener("error", function(event) {
    // handle error event
});
  • bufferedAmount属性,表示还有多少字节的二进制数据没有发送出去。它可以用来判断发送是否结束。
var data = new ArrayBuffer(10000000);
socket.send(data);

if (socket.bufferedAmount === 0) {
// 发送完毕
} else {
// 发送还没结束
}

 

 推荐好文:http://www.ruanyifeng.com/blog/2017/05/websocket.html

 

posted @ 2020-08-19 14:56  枫叶布  阅读(189)  评论(0编辑  收藏  举报