Подтвердить что ты не робот

Список подключенных клиентов username using socket io

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

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

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

а затем выполните следующие действия:

users[0].username

В каких других случаях я могу это сделать?

Решено: Это своего рода дубликат, но решение не выписано очень четко в любом месте, поэтому я подумал, что записал его здесь. Это решение post от Энди Хин, на которое ответил 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
    }
});
4b9b3361

Ответ 1

Есть похожие вопросы, которые помогут вам в этом:

Socket.IO - как мне получить список подключенных сокетов/клиентов?

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

Мой совет - следить за списком подключенных клиентов, потому что вы никогда не знаете, когда внутренний API Socket.IO может измениться. Поэтому при каждом подключении добавьте клиента в массив (или в базу данных) и на каждом отключении удалите его.