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 #<Namespace> has no method 'clients' 

谢谢。

由于socket.io 1.0的API被显着改变,所以旧的代码可能无法正常工作。

要获得房间中的客户数量,您可以使用此function:

 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 (可选)default = '/'

发送消息给这个房间的用户只能使用.to方法:

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