2013-04-01 2 views
2

Цель моей простой попытки - отобразить онлайн-список пользователей. Я имею в виду отображение не идентификатор socket.io, а отображение профиля пользователя. Когда авторизованный пользователь подключается к моему серверу, откройте канал socket.io, он должен получить свой профиль и отправить сообщение другому подключенному пользователю, к которому подключен новый пользователь (имя, адрес электронной почты и т. Д.). Я видел много примеров, как сделать это в рамках авторизации, но он не справляется с отключением. Что я хочу сделать, и то, что я не могу сделать в псевдокоде:Ссылка socket.io ID с экспрессом и паспортом

var io = require("socket.io").listen(server); 
io.set("authorization", function(data, callback){ 
    // ... some code... 
    callback(null, true); 
}); 

io.sockets.on('connection', function (socket) { 
    var UserProfile = passport.getUserProfile(socket.id) 
    io.sockets.emit('user_connected', {UserProfile: UserProfile, socketID: socket.id}); 

    io.sockets.on('disconnect', function (socket) { 
     io.sockets.emit('user_disconnected', {socketID: socket.id}); 
    }); 

}); 

Это псевдокод!
Мой стек переполнен. Я просто хочу связать идентификатор socket.io и паспортный аккаунт вместе в пределах соединения. Как мне это сделать?

ответ

1

У меня такая же проблема, и мое решение заключается в следующем (надеюсь, кто-то получает лучшее представление):

  • я добавить имя пользователя для рендеринга вызова (с использованием нефрита): res.render (» chatroom ', {имя пользователя: req.user.username});
  • сразу после подключения к сокету на клиенте (io.connect), i выдает сообщение на сервер с именем пользователя в качестве параметра, используя событие connect на клиенте (socket.on ('connect', function (данные) {...});
  • на сервере, я хранить имя пользователя в объекте (клиенты [socket.id] = имя пользователя)
  • после этого, я получаю имя пользователя в каждом сообщении сокета путем доступа объект клиентов
+0

отличный ответ @luschn ... быстрый вопрос, что это за код, эффективно выполняющий клиентов [socket.id] = username Назначает ли объект объекту с использованием скобок? – Pinky

+1

Да, вы не можете использовать точечную нотацию в этом случае (clients.socket.id будет чем-то совершенно другим). в основном он принимает идентификатор сокета как ключ в ассоциативном массиве/объекте и использует имя пользователя как значение. – luschn

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