WebSocket
- 一种网络传输协议,可在单个TCP连接上进行两个设备之间的双向通信。
- 原理:通过HTTP/1.1协议的101状态码进行一次握手,建立长连接。
- 优点:
- 允许服务器主动向客户端发推送数据。
- 只需一次握手就可建立长连接。
- (此处原文“进行”后内容缺失,假设为描述其他优点,但具体未给出,故留空或可根据实际情况补充。)
- 运行环境:支持web浏览器与web服务器通信,无需额外客户端。
- 与HTTP不同:但都是依赖于TCP传输协议,WebSocket通过HTTP的80和443端口进行传输,并支持HTTP代理和中介;通过设置头部
HTTP Upgrade
从HTTP协议改为WebSocket协议。 - 解决问题:解决了处理小消息时Comet双向通信的TCP握手和HTTP头的开销。
- 两种规范:
- ws(WebSocket)(明文传输,即HTTP协议可以使用)。
- wss(WebSocket Secure)(加密传输,即需要HTTPS协议)。
头部示例
const headers = [
'HTTP/1.1 101 Switching Protocols',
'Upgrade: websocket',
'Connection: Upgrade'
];
客户端
function Ws() {
if (!WebSocket in window) {
alert('您的浏览器不支持websocket!');
return;
}
const ws = new WebSocket('ws://localhost:9000');
ws.onopen = function (param) {
console.log('opened');
ws.send('success');
};
ws.onmessage = function (msg) {
console.log(msg);
};
ws.onclose = function () {
console.log('closed');
};
}
服务端
Node.js 版
常用框架 ws
- 两种模式:wss(需要SSL/TLS) / ws
const WebSocket = require('ws');
const ws = new WebSocket.Server({ port: 9000 });
ws.on('connection', function connection(connect) {
connect.on('message', function incoming(message) {
console.log('received: %s', message);
});
connect.send('okokokok');
});