express-ws如何向指定用户发送消息
时间: 2023-12-29 22:02:51 浏览: 127
要向指定用户发送消息,您可以在服务器端使用 WebSocket 的 `send()` 方法向特定的用户发送消息。以下是一个示例代码:
```javascript
// server.js
const express = require('express');
const expressWs = require('express-ws');
const app = express();
expressWs(app);
const clients = [];
app.ws('/chat', (ws, req) => {
ws.on('message', (msg) => {
const data = JSON.parse(msg);
const { clientId, message } = data;
// 找到指定的客户端并向其发送消息
const client = clients.find((c) => c.clientId === clientId);
if (client) {
client.ws.send(message);
}
});
ws.on('close', () => {
// 移除断开连接的客户端
const index = clients.findIndex((c) => c.ws === ws);
if (index !== -1) {
clients.splice(index, 1);
}
});
});
app.post('/register', (req, res) => {
const clientId = req.body.clientId;
const client = {
clientId: clientId,
ws: req.ws,
};
clients.push(client);
res.status(200).send('Client registered successfully');
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});
```
在上面的示例中,我们添加了一个新的路由 `/register`,用于注册客户端。当客户端发送 POST 请求时,我们从请求体中获取 `clientId`,并将其与客户端的 WebSocket 连接一起添加到 `clients` 数组中。
当服务器收到客户端发送的消息时,我们解析该消息,并提取出 `clientId` 和 `message`。然后,我们使用 `find()` 方法在 `clients` 数组中查找具有相应 `clientId` 的客户端。如果找到指定的客户端,我们使用其 WebSocket 连接的 `send()` 方法向其发送消息。
请注意,上述代码只是一个示例,您可能需要根据您的实际需求进行相应的修改和适配。还要确保在客户端注册之前不要尝试向其发送消息,以免出现错误。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)