我的socket.io版本1.3.5
我希望特定房间的客户数量。
这是我的代码。
socket.on('create or join', function (numClients, room) {
socket.join(room);
});
我使用此代码在客房内获取客户:
console.log('Number of clients',io.sockets.clients(room));
答案 0 :(得分:4)
要获取会议室中的客户端数量,您可以执行以下操作:
function NumClientsInRoom(namespace, room) {
var clients = io.nsps[namespace].adapter.rooms[room];
return Object.keys(clients).length;
}
此变量客户端将保存一个对象,其中每个客户端都是一个键。 然后,您只需获得该对象中的客户端(密钥)数量。
如果您尚未定义名称空间,则默认名称为“/".
答案 1 :(得分:3)
这适用于版本3
io.sockets.adapter.rooms.get(roomName).size
答案 2 :(得分:2)
有一个计数器变量来保持计数,当有人加入时增加,当人们断开连接时减少。
io.on('connection', function (socket) {
var numClients = {};
socket.on('join', function (room) {
socket.join(room);
socket.room = room;
if (numClients[room] == undefined) {
numClients[room] = 1;
} else {
numClients[room]++;
}
});
socket.on('disconnect', function () {
numClients[socket.room]--;
});
答案 3 :(得分:1)
在socket.io ^ 1.4.6
中function numClientsInRoom(namespace, room) {
var clients = io.nsps[namespace].adapter.rooms[room].sockets;
return Object.keys(clients).length;
}
您需要将.sockets
添加到rooms[room]
,因为变量客户端会在sockets
变量中保留所有连接。
答案 4 :(得分:1)
这对我有用
io.in('yourRoom').allSockets().then(result=>{
console.log(res.size) })
答案 5 :(得分:1)
我参加聚会有点晚了,但我找到了一个有效解决方案:
<块引用>io.in('YOUR_ROOM').engine.clientsCount;
答案 6 :(得分:0)
这项工作适合我。
// check if your room isn't undefined.
if (io.sockets.adapter.rooms['your room name'])
{
// result
console.log(io.sockets.adapter.rooms['your room name'].length);
}
答案 7 :(得分:0)
socket.io 的 rooms
是一个 Map
,其元素映射到 Set
。
您使用 get(roomId)
获取 roomId
中该 Map
的值,并使用 .size
获取集合中元素的数量,这与 .length
不同用于数组中元素的数量。
socket.on("join-room",roomId => {
const room = io.of("/yourNameSpace").adapter.rooms.get(roomId)
if(room === undefined || room.size < 2) {
socket.join(roomId)
}else {
io.of("/yourNameSpace").emit("can't join link")
}
})
答案 8 :(得分:0)
io.nsps['/'].adapter.rooms['your room name'].sockets;
如果您的命名空间不是 /
,请更改它。