如何获取房间中的socket.io客户端数量?
Posted
技术标签:
【中文标题】如何获取房间中的socket.io客户端数量?【英文标题】:how to get socket.io number of clients in room? 【发布时间】:2015-10-06 17:47:00 【问题描述】:我的 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));
【问题讨论】:
请详细说明您需要什么帮助。 我想获取特定房间的客户数量 【参考方案1】:这适用于版本 3
io.sockets.adapter.rooms.get(roomName).size
【讨论】:
【参考方案2】:要获取房间中的客户数量,您可以执行以下操作:
function NumClientsInRoom(namespace, room)
var clients = io.nsps[namespace].adapter.rooms[room];
return Object.keys(clients).length;
此变量 clients 将保存一个对象,其中每个客户端都是一个键。 然后,您只需获取该对象中的客户端(键)的数量。
如果您尚未定义命名空间,则默认命名空间为“/”。
【讨论】:
【参考方案3】:有一个计数器变量来保持计数,当有人加入时增加,当有人断开时减少。
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]--;
);
【讨论】:
房间名称是动态的,来自客户端。 编辑为使用房间变量。 我认为您的代码显示了 sock.io 中的客户总数 您想统计每个动态房间吗? 更新:现在,您可以通过numClients[socket.room]
获取每个房间的客户数量。【参考方案4】:
这对我有用。
// 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);
【讨论】:
【参考方案5】:这对我有用
io.in('yourRoom').allSockets().then(result=>
console.log(res.size) )
【讨论】:
【参考方案6】:在 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
变量中。
【讨论】:
【参考方案7】:我参加聚会有点晚了,但我找到了一个有效的解决方案:
io.in('YOUR_ROOM').engine.clientsCount;
【讨论】:
【参考方案8】:socket.io 的rooms
是一个Map
,其元素映射到Set
s。
您使用get(roomId)
来获取Map
中roomId
的值,并且您使用.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")
)
【讨论】:
【参考方案9】:io.nsps['/'].adapter.rooms['your room name'].sockets;
如果您的命名空间不是/
,请更改它。
【讨论】:
这对我有用。 var count = io._nsps.get('/').adapter.rooms.get(roomName).size;以上是关于如何获取房间中的socket.io客户端数量?的主要内容,如果未能解决你的问题,请参考以下文章