2013-04-01 147 views
2

我簡單的嘗試的目標是顯示在線用戶列表。我的意思是顯示不是socket.io ID,但顯示用戶配置文件。當授權用戶連接到我的服務器時,打開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 ID和護照帳戶連接在一起。我該怎麼做?

回答

1

我得到了同樣的問題,我的解決方案如下(希望有人得到一個更好的主意):

  • 我的用戶名添加到渲染調用(使用玉): res.render(」 chatroom',{username:req.user.username});
  • 在連接到客戶端(io.connect)上的套接字之後,我使用客戶端上的連接事件(socket.on('connect',function()()將一個 消息發送到服務器,數據){...});
  • 在服務器上,我的用戶名存儲在一個對象(客戶[socket.id] =用戶名)
  • 之後,我通過訪問得到在每一個插座消息的用戶名 客戶端對象
+0

偉大的答案@luschn ...快速問題這行代碼有效地做什麼 clients [socket.id] =用戶名 它是否使用括號表示將屬性分配給對象? – Pinky

+1

是的,你不能在這種情況下使用點符號(clients.socket.id將是完全不同的東西)。基本上它將套接字ID作爲關聯數組/對象中的鍵,並使用用戶名作爲值。 – luschn