javascript - 如何知道哪个用户在线?

标签 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
        });
      }
 });
});
});

这会检查房间中的客户端的 acc_id 是否不等于当前用户 ID,这意味着房间中是否有 2 个人,但这不起作用。

最佳答案

下面的代码在服务器中包含一个users 数组。当用户连接时,它会发送带有 id 的 connect 事件。该id存储在users数组中。当用户断开时,id将从数组中删除。因此,您可以设置一个条件,当用户 ID 位于数组中时 user is online else offline

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

用于检查分别具有 id1 和 id2 的 2 个用户是否在线

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'});

关于javascript - 如何知道哪个用户在线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54462074/

相关文章:

javascript - "+"登录 JS mailto 链接(Android 和 Chrome)

javascript - 如何优雅地处理 iframe 断路器?

javascript - 在 contenteditable div 中使用焦点元素?

javascript - 使用 Node JS 在 Node JS 上进行 HTTP 请求回调

node.js - Ubuntu 服务器上的 Rscript 和 Nodejs 集成

javascript - socket.io.js 未加载

javascript - 从函数-Node JS -socket.io发出事件的正确方法

javascript - 更改卡片布局中的事件项目。扩展程序

javascript - 测试套接字是否仍然打开

node.js - 目前在 Node v 10 中使用 ES6/Import 语句等最简单的方法是什么