Websocket socket.io'中的用户状态;房间';

Websocket socket.io'中的用户状态;房间';,websocket,socket.io,Websocket,Socket.io,我有一个系统,用户使用Socket.io连接到“房间”。现在,当人们加载一个页面时,就会建立连接,我可以看到有多少人连接到给定的页面(指示房间的URL) 我想要的是能够在页面上看到关于用户的元数据。我想知道鲍勃、史蒂夫和玛丽正在看网页。现在我只获取内部会话ID 服务器 io.on('connection', function(socket) { socket.on('viewPage', function(data, fn) { var roomName = 'page-' + da

我有一个系统,用户使用Socket.io连接到“房间”。现在,当人们加载一个页面时,就会建立连接,我可以看到有多少人连接到给定的页面(指示房间的URL)

我想要的是能够在页面上看到关于用户的元数据。我想知道鲍勃、史蒂夫和玛丽正在看网页。现在我只获取内部会话ID

服务器

io.on('connection', function(socket) {
  socket.on('viewPage', function(data, fn) {
    var roomName = 'page-' + data.url;
    socket.join(roomName);
    var room = io.sockets.adapter.rooms[roomName];
    console.log(Object.keys(room).length + ' users connected');
    fn({msg: 'Connected to room ' + roomName})
  })
});
客户端

var socket = io();
socket = io.connect("http://localhost:5000");
socket.on('connect', function(data) {
  socket.emit('viewPage', {url: '/foo/bar'}, function(resp) {
    console.log(resp)
  });
});
通过查看Socket.io文档,可以看到
join
等等,但我看不到任何将元数据附加到客户端连接的方法


我该怎么做呢?如何确保可以在页面上看到已连接用户的列表?

下面是一种非常简单且不安全的方法,可以将元数据从客户端传递到服务器,并使用中间件将其附加到套接字。通常只传递会话id,并在服务器上获取数据,但我已经抄近路了

//Client
socket = io.connect("http://localhost:5000", {query: 'name=Bob'});

//Server
io.use(function (socket, next){
    var name = socket.handshake.query.name;
    socket._name = name;
    next();
});
现在您可以执行以下操作:

var room = io.sockets.adapter.rooms[roomName];
for (var key in room){
    console.log(room[key]._name);
}

注意:您应该处理来自同一用户的多个选项卡,因此您只需要显示不同的
\u name
值,您需要会话。您是否也使用Express和PassportJS进行用户登录?签出不确定我是否需要会话,我只需要某种方式将元数据附加到连接的客户端。Pusher是在他们在场的情况下这样做的,但我不确定怎么做。