node.js socket.io房间用户总数

node.js socket.io房间用户总数,node.js,socket.io,Node.js,Socket.io,我试图计算一个特定房间中的用户总数,并将其广播给该房间中的所有人 以下是我所拥有的,但我得到了一个错误: var clients = io.sockets.clients(cc.lowerCase(data.roomname)).length; io.sockets.in(cc.lowerCase(data.roomname)).emit('updatetotal', { total: clients }); 错误: TypeError: Object #<Namesp

我试图计算一个特定房间中的用户总数,并将其广播给该房间中的所有人

以下是我所拥有的,但我得到了一个错误:

var clients = io.sockets.clients(cc.lowerCase(data.roomname)).length;
         io.sockets.in(cc.lowerCase(data.roomname)).emit('updatetotal', { total: clients });
错误:

TypeError: Object #<Namespace> has no method 'clients'
TypeError:对象#没有方法“clients”

谢谢。

自从socket.io 1.0以来,其API发生了重大变化,因此旧代码可能无法工作

要获取房间中的客户端数量,可以使用此功能:

var getUsersInRoomNumber = function(roomName, namespace) {
    if (!namespace) namespace = '/';
    var room = io.nsps[namespace].adapter.rooms[roomName];
    if (!room) return null;
    var num = 0;
    for (var i in room) num++;
    return num;
}
或者更简洁地说:

var getUsersInRoomNumber = function(roomName, namespace) {
    if (!namespace) namespace = '/';
    var room = io.nsps[namespace].adapter.rooms[roomName];
    if (!room) return null;
    return Object.keys(room).length;
}
此函数包含两个图形:

  • roomName
  • 名称空间
    (可选)默认值=
    “/”
若要向此会议室的用户发送消息,请仅使用
。至
方法:

io.to(yourRoomName).emit('updatetotal', { total: getUsersInRoomNumber(yourRoomName) });

获取房间中的总用户数

io.sockets.adapter.rooms.get(roomName).size

您能再显示一些代码吗?这还不足以调试问题,但问题是用户的数量,而不是套接字(会话)的数量。如果同一用户有3个或4个浏览器选项卡,则此用户数将为3个或4个。。。但真正的联网用户只有1个。