node.js socket.io room共有用户

时间:2014-06-08 17:30:00

标签: 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 });

ERROR:

TypeError: Object #<Namespace> has no method 'clients'

感谢。

2 个答案:

答案 0 :(得分:2)

由于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
  • namespace(可选)默认= '/'

要向此会议室的用户发送消息,请使用.to方法:

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

答案 1 :(得分:0)

获取房间内的总用户数

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