链接socket.io ID与快递和护照

时间:2013-04-01 06:37:33

标签: express socket.io passport.js

我的简单尝试的目标是显示在线用户列表。我的意思是显示不是socket.io ID但显示用户配置文件。当授权用户连接到我的服务器时,打开socket.io频道,需要获取他的个人资料并向其他连接用户发送新用户(姓名,电子邮件等)已连接的消息。我看到许多示例如何在授权范围内执行此操作,但它不处理断开连接。我想做什么以及我不能用伪代码做什么:

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 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我的解决方案如下(希望有人能有更好的想法):

  • 我将用户名添加到渲染调用中(使用jade): res.render('chatroom',{username:req.user.username});
  • 在连接到客户端(io.connect)上的套接字后,我发出一个 消息到服务器,用户名作为参数,使用客户端上的connect事件(socket.on('connect',function(data){...});
  • 在服务器上,我将用户名存储在一个对象中(clients [socket.id] =用户名)
  • 之后,我通过访问获取每个套接字消息中的用户名 客户对象