socket.io确定用户是在线还是离线

问题描述 投票:12回答:1

我们可以跟踪此代码是建立还是断开连接

console.log('a user connected');
    socket.on('disconnect', function () {
        console.log('user disconnected');
    });

嗯,很好。但是,我们如何确定哪些用户已连接或离线。我的客户端使用PHP/HTML编写,因此具有用户ID。

node.js websocket socket.io real-time
1个回答
28
投票

如果您的客户端具有特定的用户ID,则需要将其发送到socket.io服务器。例如。在客户端,您可以执行

<script>
 const socket = io();
 socket.emit('login',{userId:'YourUserID'});
</script>

并且在服务器上,您将放置类似内容

const users = {};
io.on('connection', function(socket){
  console.log('a user connected');
  socket.on('login', function(data){
    console.log('a user ' + data.userId + ' connected');
    // saving userId to array with socket ID
    users[socket.id] = data.userId;
  });
  socket.on('disconnect', function(){
    console.log('user ' + users[socket.id] + ' disconnected');
    // remove saved socket from array
    const index = users.indexOf(socket.id);
    if (index > -1) {
      users.splice(index, 1);
    }
  });
});

现在您可以将套接字ID与您的用户ID配对并使用它。

© www.soinside.com 2019 - 2024. All rights reserved.