WebSocket 中的clients的使用
时间: 2024-05-16 16:13:17 浏览: 17
在 WebSocket 中,clients 表示当前连接的所有客户端。它是一个 Set 对象,可以用来追踪连接到 WebSocket 服务器的所有客户端对象。
在使用 WebSocket 的时候,我们可以利用 clients 对象来实现向所有连接的客户端发送消息的功能。例如,我们可以使用以下代码向所有客户端发送消息:
```javascript
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
// 发送消息给所有客户端
wss.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send('有新用户加入聊天室!');
}
});
// 接收来自客户端的消息
ws.on('message', function incoming(message) {
console.log('收到客户端消息:', message);
});
});
```
在上面的代码中,我们在客户端连接到 WebSocket 服务器时,使用 clients 对象向所有客户端发送一条消息,表示有新用户加入聊天室。在接收到客户端发送的消息时,我们只处理当前客户端发送的消息,而不需要向其它客户端发送消息。
需要注意的是,clients 对象只能在 WebSocket 服务器的 connection 事件中使用。如果你需要在其它事件中使用 clients 对象,则需要将其保存为一个变量。例如:
```javascript
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
let clients = new Set();
wss.on('connection', function connection(ws) {
// 将当前客户端对象添加到 clients 集合中
clients.add(ws);
// 发送消息给所有客户端
clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send('有新用户加入聊天室!');
}
});
// 接收来自客户端的消息
ws.on('message', function incoming(message) {
console.log('收到客户端消息:', message);
});
// 当客户端断开连接时,将其从 clients 集合中移除
ws.on('close', function close() {
clients.delete(ws);
});
});
```
在上面的代码中,我们将 clients 对象保存为一个 Set 变量,并在客户端连接时将当前客户端对象添加到 clients 集合中。在接收到客户端发送的消息时,我们依然只处理当前客户端发送的消息。在客户端断开连接时,我们将其从 clients 集合中移除。