websocket是基于tcp协议注册的全双工通信协议,协议名为ws
可以实现服务器端主动推送
客户端注册
let ws = new WebSocket('ws:localhost:8000');//根据实际的服务器端口来确定
//注册事件
//open,close/message/error
ws.addEventListener('open',handleOpen,false);
ws.addEventListener('close',handleClose,false);
ws.addEventListener('message',handleMessage,false);
ws.addEventListener('error',handleError,false);
function handleOpen(){
// 可以做一些初始化操作
console.log("open");
}
function handleClose(){
console.log("close");
}
function handleMessage(msg){
console.log("收到消息");
console.log(msg);
}
function handleError(){
console.log("error");
}
//响应用户输入或者触发时可以发送
ws.send(*****)//发送字符串
服务器端注册
需要npm install -S ws
//server.js
const ws = require('ws');
const app = new ws.Socket({
port: 8000,
});
let clients = [];//用来记录与服务器通信的用户端然后广播出去
// app需要注册的事件
// close open connection message error
app.on('open',handleOpen);
app.on('close',handleClose);
app.on('error',handleError);
app.on('connection',handleConnection);
let handleOpen = ()=>{
console.log("open");
}
let handleClose = ()=>{
console.log("close");
}
let handleError = ()=>{
console.log("error");
}
let handleConnection=(ws)=>{
console.log("connection");
clients.push(ws);
ws.on('message',handleMessage);
}
let handleMessage = (msg)=>{
clients.forEach((conn) => {
conn.send(msg); //广播
})
console.log(msg);
}
node server.js