WebSocket 是一种网络通信协议。WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
var ws = new WebSocket("wss://echo.websocket.org");
// 实例对象的onopen属性,用于指定连接成功后的回调函数。
ws.onopen = function(event) {
console.log("Connection open ...");
ws.send("Hello WebSockets!");
};
// 实例对象的onmessage属性,用于指定收到服务器数据后的回调函数。
ws.onmessage = function(event) {
console.log( "Received Message: " + evt.data);
ws.close();
};
// 实例对象的onclose属性,用于指定连接关闭后的回调函数。
ws.onclose = function(evt) {
var code = event.code;
var reason = event.reason;
var wasClean = event.wasClean;
console.log("Connection closed.");
};
// 实例对象的onerror属性,用于指定报错时的回调函数。
ws.onerror = function(event) {
// handle error event
};
readyState
属性返回实例对象的当前状态,共有四种。
下面是一个示例。
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;
}
实例对象的send()
方法用于向服务器发送数据。
发送文本的例子。
ws.send('your message');
实例对象的bufferedAmount属性,表示还有多少字节的二进制数据没有发送出去。它可以用来判断发送是否结束。
var data = new ArrayBuffer(10000000);
socket.send(data);
if (socket.bufferedAmount === 0) {
// 发送完毕
} else {
// 发送还没结束
}
WebSocket 服务器的实现
常用的 Node 实现有以下三种。
ws为例:
安装ws
npm install ws
服务端代码
const WebSocketServer = require('ws').Server
const wss = new WebSocketServer({ port: 8888 }) //服务端口8888
console.log('创建ws服务', 'ws://localhost:8888')
wss.on('connection', function (ws: any) {
console.log('服务端:客户端已连接')
ws.send('Hello Client!')
ws.on('message', function (message: any) {
//打印客户端监听的消息
console.log('Client: ', message)
ws.send('I revice your msg!')
})
})