ExpressWebSocket是基于Node.js的WebSocket服务器,它使用了Express框架,并可以操作WebSocket。本文将从多个方面详细阐述ExpressWebSocket。
一、使用ExpressWebSocket进行简单通信
要使用ExpressWebSocket进行简单的通信,您需要先安装依赖项。请使用以下命令进行安装:
npm install express express-ws
接下来,您需要在您的Express应用程序中初始化WebSocket服务器。下面是一个示例代码,其中wss为WebSocket服务器:
const express = require('express');
const expressWs = require('express-ws');
const app = express();
expressWs(app);
const PORT = 3000;
app.ws('/', (ws, req) => {
console.log('WebSocket connected');
ws.on('message', msg => {
console.log(`Received message: ${msg}`);
ws.send(`You said: ${msg}`);
});
});
app.listen(PORT, () => console.log(`WebSocket server started on port ${PORT}`));
上述代码中定义了一个WebSocket路由’/’. 当客户端连接到WebSocket服务器时,它将在控制台输出’WebSocket connected’,并在收到消息时回复客户端消息。我们在客户端使用如下代码,用于进行WebSocket通信:
const socket = new WebSocket('ws://localhost:3000/');
socket.addEventListener('open', event => {
socket.send('Hello from client!');
});
socket.addEventListener('message', event => {
console.log(`Received message: ${event.data}`);
});
以上代码用于在客户端建立WebSocket连接并发送消息。当服务器收到这个消息后,它将会回复’You said: Hello from client!’,在客户端控制台输出该信息。
二、使用ExpressWebSocket进行广播
要使用ExpressWebSocket进行广播,您需要创建一个连接列表并在每个连接上进行迭代。下面是一个示例代码,其中本质上是把所有的WebSocket连接都保存在了一个数组中:
const express = require('express');
const expressWs = require('express-ws');
const app = express();
expressWs(app);
const PORT = 3000;
const connections = new Set();
app.ws('/', (ws, req) => {
console.log('WebSocket connected');
connections.add(ws);
ws.on('close', () => {
connections.delete(ws);
});
ws.on('message', msg => {
console.log(`Received message: ${msg}`);
for (let conn of connections) {
conn.send(msg);
}
});
});
app.listen(PORT, () => console.log(`WebSocket server started on port ${PORT}`));
在上述代码中,我们创建了一个空的Set,用于保存WebSocket连接。当客户端连接到WebSocket服务器时,我们将其添加到Set中,当客户端关闭连接时,我们从Set中删除该连接。在每个WebSocket连接上,我们迭代所有连接并将传入的消息发送到每个连接。
三、使用ExpressWebSocket进行多房间通信
要使用ExpressWebSocket进行多房间通信,您需要先确定什么时候应该切换到另一个房间并将每个WebSocket连接分配给相应的房间。以下是一个示例代码,其中本质上是基于广播做了改进。
const express = require('express');
const expressWs = require('express-ws');
const app = express();
expressWs(app);
const PORT = 3000;
const connections = new Map();
function joinRoom(ws, roomId) {
if (!connections.has(roomId)) {
connections.set(roomId, new Set());
}
connections.get(roomId).add(ws);
}
function leaveRoom(ws, roomId) {
if (connections.has(roomId)) {
connections.get(roomId).delete(ws);
}
}
function broadcastRoom(roomId, ...args) {
if (connections.has(roomId)) {
for (let conn of connections.get(roomId)) {
conn.send(...args);
}
}
}
app.ws('/rooms/:roomId', (ws, req) => {
console.log('WebSocket connected');
const roomId = req.params.roomId;
joinRoom(ws, roomId);
ws.on('close', () => {
leaveRoom(ws, roomId);
});
ws.on('message', msg => {
console.log(`Received message: ${msg}`);
broadcastRoom(roomId, msg);
});
});
app.listen(PORT, () => console.log(`WebSocket server started on port ${PORT}`));
在上述代码中,我们定义了三个功能函数,分别为加入房间、离开房间和广播给指定房间。在WebSocket路由’/rooms/:roomId’中,我们从url的参数中获取roomId,并将WebSocket连接加入房间。当客户端断开连接时,我们从指定房间中删除该连接。在每个WebSocket连接上,我们将传入的消息广播到相应的房间。要将消息广播到特定房间,请使用broadcastRoom函数,传入roomId和您要广播的消息。
四、结语
本文从简单通信、广播和多房间通信三个方面详细阐释使用ExpressWebSocket进行通信的各个环节。在使用ExpressWebSocket开发WebSocket应用程序时,请牢记本文提供的示例代码,可以让您更好地了解ExpressWebSocket的操作流程。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/206156.html
微信扫一扫
支付宝扫一扫