2013-08-27 2 views
0

В моем сценарии я присоединяюсь к нескольким комнатам, и это отлично работает.Получить названный список комнат

Сервер:

io.sockets.on("connection", function(socket) { 
    socket.on("join", function(room) { 
     socket.join(room); 
    }); 
}); 

Клиент:

socket.emit("join", "website"); 
socket.emit("join", "user"); 
socket.emit("join", "front"); 

Однако, если я попытаюсь перечислить их через io.rooms я получаю странный объект, состоящий из пустого ключа и массив номеров, но с их идентификаторами (Я думаю), а не их имя.

{ '': 
    [ 'FcETdaJ3P4R-IyGdevLj', 
    '9Qv2tEe3-IrKleFSevLk', 
    'F6G6nq5r8lM_nI-ievLl' ] } 

Как получить именованный список номеров с подключенного счетчика пользователя и т.д .:

{ 
    "website": 6, 
    "front": 4, 
    "user": 1, 
} 

ответ

0

io.rooms является правильным способом перечислить номера. Ключами в объекте являются названия комнат, массив - это идентификатор подключенных клиентов. '' - это номер по умолчанию, поэтому кажется, что никто не подключился к какой-либо комнате, когда вы пытаетесь их зарегистрировать.

0

Переменная io.sockets.manager.rooms предоставит вам объект с глобальной комнатой, всеми остальными комнатами и идентификаторами клиентов в этих комнатах.

console.log(io.sockets.manager.rooms); 

rooms: { 
    '': [ 
    'IDJYUhL2RMNGiulk5Aii' 
    ], 
    'room1': [ 
    'IDJYUhL2RMNGiulk5Aii', 
    'dTtHIdIzSfV96kbu5Aij' 
    ], 
    'room2': [ 
    'dTtHIdIzSfV96kbu5Aij' 
    ] 
} 

Таким образом, чтобы получить количество пользователей, просто использовать length() в списке пользователей.

Смежные вопросы