socket.io 服务端获取房间内的信息
时间: 2023-09-04 22:15:47 浏览: 277
要获取 socket.io 服务端中特定房间内的信息,可以使用以下方法:
1. `io.sockets.adapter.rooms`:获取所有房间的信息,返回一个对象,包含所有房间的名称以及每个房间中客户端的 socket ID。
2. `io.sockets.adapter.rooms[room]`:获取指定房间内的信息,返回一个对象,包含该房间的名称以及该房间中所有客户端的 socket ID。
3. `io.sockets.in(room).clients(callback)`:获取指定房间内的所有客户端的 socket 对象,返回一个数组。可以使用 `forEach` 方法遍历数组,获取每个客户端的详细信息。
例如,以下代码可以获取名为 "chatroom" 的房间中所有客户端的 socket ID:
```javascript
io.on('connection', function(socket){
socket.join('chatroom');
var clients = io.sockets.adapter.rooms['chatroom'].sockets;
console.log(clients); // 返回一个对象,包含该房间中所有客户端的 socket ID
});
```
如果要获取每个客户端的详细信息,可以使用 `io.sockets.connected[socket.id]` 获取 socket 对象,如下所示:
```javascript
io.on('connection', function(socket){
socket.join('chatroom');
var clients = io.sockets.adapter.rooms['chatroom'].sockets;
Object.keys(clients).forEach(function(socketId) {
var clientSocket = io.sockets.connected[socketId];
console.log(clientSocket); // 返回每个客户端的 socket 对象
});
});
```
注意,上面的代码只在客户端加入房间时获取了一次房间内的信息,如果有新客户端加入或者有客户端离开,需要重新获取该房间内的信息。可以在 `join` 和 `leave` 事件中重新获取房间信息,如下所示:
```javascript
io.on('connection', function(socket){
socket.on('join', function(room){
socket.join(room);
var clients = io.sockets.adapter.rooms[room].sockets;
// 处理房间内的客户端信息
});
socket.on('leave', function(room){
socket.leave(room);
var clients = io.sockets.adapter.rooms[room].sockets;
// 处理房间内的客户端信息
});
});
```
阅读全文