2

我简单尝试的目标是显示在线用户列表。我的意思是显示不是 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 和护照帐户链接在一起。我该怎么做?

4

1 回答 1

1

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

  • 我将用户名添加到渲染调用(使用jade): res.render('chatroom', {username: req.user.username});
  • 连接到客户端上的套接字(io.connect)后,我使用客户端上的连接事件(socket.on('connect',函数(数据){。 .. });
  • 在服务器上,我将用户名存储在一个对象中(clients[socket.id] = username)
  • 之后,我通过访问客户端对象在每个套接字消息中获取用户名
于 2013-04-24T20:27:03.610 回答