Список подключенных клиентов, имя пользователя с использованием сокета io

Я сделал клиент чата с разными комнатами чата в NodeJS, socketIO и Express. Я пытаюсь отобразить обновленный список подключенных пользователей для каждой комнаты.

Есть ли способ связать имя пользователя с объектом, чтобы я мог видеть все имена пользователей, когда я это делаю:

var users = io.sockets.clients('room')

, а затем делаю что-то вроде этого:

users[0].username

Как еще я могу это сделать?

Решено: Это своего рода дубликат, но решение нигде не написано очень четко, поэтому я подумал, что запишу его здесь.Это решение сообщения от Энди Хина , на которое ответил mak . А также комментарии в этом посте.

Просто чтобы немного прояснить ситуацию. Если вы хотите сохранить что-либо в объекте сокета, вы можете сделать следующее:

socket.set('nickname', 'Guest');    

сокеты также имеют метод get, поэтому, если вы хотите, чтобы все пользователи делали это:

for (var socketId in io.sockets.sockets) {
    io.sockets.sockets[socketId].get('nickname', function(err, nickname) {
        console.log(nickname);
    });
}

Как указал alessioalex , API может измениться, и безопаснее отслеживать пользователя самостоятельно. Вы можете сделать это, используя идентификатор сокета при отключении.

io.sockets.on('connection', function (socket) { 
    socket.on('disconnect', function() { 
        console.log(socket.id + ' disconnected');
        //remove user from db
    }
});

35
задан Community 23 May 2017 в 12:10
поделиться