WebSocket 是一种通信协议,使用 ws://
(非加密)和 wss://
(加密)作为协议前缀。该协议不实行同源政策,只要服务器支持,就可以通过它进行跨源通信。
它是一种双工通信,前端可以主动向后台发送信息,后台也可以主动向前端发送信息。而 HTTP 只是一种半双工,后台只能被动响应。
WebSocket 是高级 API,存在不兼容,但是有一个库,socket.io 可以兼容,一般都是用它。
基本用法
前端
创建一个 socket
let socket = new WebSocket('ws://localhost:3000');
发送信息,在通道开启之后,才能发送
socket.onopen = function() {
socket.send('aa');
}
接受信息
socket.onmessage = function (e) {
console.log(e.data);
}
后台
在后台,需要安装 ws 包
npm install ws
开启 ws 服务
let express = require('express');
let WebSocket = require('ws');
let app = express();
let wss = new WebSocket.Server({ port: 3000 });
接受数据,在连接之后,监听 onmessage 来获取数据
wss.on('connection', function (ws) {
ws.on('message', function (data) {
console.log(data);
ws.send('bb');
})
})
注意,后台事件处理程序中没有事件对象,直接能够获取到数据
发送数据,建立连接的回调函数中,传入的是 ws,是 WebSocket 的实例,需要与 wss 服务区分开。
wss.on('connection', function (ws) {
ws.send('bb');
})