如何知道哪个用户在线?

时间:2019-01-31 13:51:09

标签: javascript node.js socket.io

我想知道一个房间中是否有2个用户在线。如果两者都在线,那么我想告诉房间用户在线,但是我找不到找到方法来告诉他们在线。

我有一个全局数组,该数组存储所有socket.id的acc_id,并且每次socketid更改时都会更新,因此我可以知道用户没有打开另一个选项卡,因为新选项卡提供了新的客户端。

io.of('/').in(room).clients(function(error, clients) {
    console.log(clients.length);
    clients.forEach(function(iiid){
    ds.some(function(el) {
       if (el.socket_id === iiid && el.acc_id !== decrypted && clients.length >= 2) {
       io.to(room).emit('isasdjfg__-dfko', {
             dfhdf: "Oui", //Yes in French 
             pfg: room
        });
      }
 });
});
});

这将检查会议室中的客户端是否具有不等于当前用户ID的acc_id,这意味着会议室中是否有2个人,但这是行不通的。

1 个答案:

答案 0 :(得分:1)

以下代码在users中包含array server。当用户连接时,它将发送一个connect event with an idid存储在users array中。当用户disconnects时,id从数组中删除。因此,当用户ID在数组中时,您可以设定一个条件,用户是online否则是offline

if(users.includes(id))
console.log('online')

用于检查2个ID1和ID2分别是否在线的用户

if(users.includes(id1) && users.includes(id2))
console.log("both are online")

服务器

var users = [];

io.on('connection', function(socket){
  socket.on('connect', function(data){
 users[socket.id] = data.id;
  });
  socket.on('disconnect', function(){
    users.splice(socket.id,1);
  });
});

客户

var socket = io();
 socket.emit('connect',{id:'id'});