express-ws如何实现向指定客户端推送消息
时间: 2023-12-29 10:03:06 浏览: 129
要使用express-ws向指定客户端推送消息,你可以通过保存连接的方式来实现。以下是一个简单的示例代码:
```javascript
const express = require('express');
const expressWs = require('express-ws');
const app = express();
const wsInstance = expressWs(app);
// 创建一个存储连接的变量
const connections = [];
// 处理WebSocket连接
app.ws('/ws', (ws, req) => {
// 将新连接添加到连接列表中
connections.push(ws);
// 监听消息事件
ws.on('message', (msg) => {
console.log(`Received message: ${msg}`);
});
// 监听关闭事件
ws.on('close', () => {
// 从连接列表中移除关闭的连接
connections.splice(connections.indexOf(ws), 1);
});
});
// 路由处理程序,用于向指定客户端发送消息
app.get('/send/:clientId', (req, res) => {
const clientId = req.params.clientId;
const message = req.query.message;
// 在连接列表中查找指定的客户端连接
const clientConnection = connections.find((ws) => ws.id === clientId);
if (clientConnection) {
// 向指定客户端发送消息
clientConnection.send(message);
res.status(200).json({ success: true });
} else {
res.status(404).json({ success: false, error: 'Client not found' });
}
});
// 启动服务器
app.listen(3000, () => {
console.log('Server started on port 3000');
});
```
在这个示例中,我们首先创建了一个用于保存连接的数组 `connections`。当有新的WebSocket连接建立时,我们将连接添加到数组中。当连接关闭时,我们将其从数组中移除。
然后,我们通过 `/send/:clientId` 路由处理程序来处理发送消息的请求。在这个处理程序中,我们首先从参数中获取目标客户端的ID和要发送的消息。然后,我们在连接列表中查找与目标客户端匹配的连接,并使用 `send` 方法向其发送消息。
请注意,这只是一个简单的示例,没有考虑到一些边界情况和错误处理。在实际应用中,你可能需要进行更多的错误检查和处理。