【问题标题】:How to know which user is online?如何知道哪个用户在线?
【发布时间】:2019-01-31 13:51:09
【问题描述】:

我想知道一个房间里的 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 个人,但这不起作用。

【问题讨论】:

  • 请使用标准英文大写。第一人称主格不是“i”而是“I”。之所以要求您这样做,是因为您的问题及其答案将永久发布以供参考。如果他们证明很受欢迎,那么其他人将不得不回来清理你的风格。即使英语不是您的第一语言,人们也希望您的知识足以将“I”大写。
  • 而“法语是”是“Oui”,而不是“Qui”... :-)
  • @MarcoS 已编辑,现在有人愿意帮助我解决这个问题吗?
  • 抱歉,对socket.io不太了解... :-( 只是在评论帖子... :-)

标签: javascript node.js socket.io


【解决方案1】:

以下代码在server 中包含users array。当用户连接时,它会发送一个connect event with an idid 存储在 users array 中。当用户 disconnects 时,id 从数组中删除。因此,当用户 id 在数组中用户为online 否则为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'});

【讨论】:

  • 检查两个用户的阵列。如果他们都在场,则表示他们都在线
  • 如何获取断开连接事件的数据?
  • 我的错,做了一个oopsie。我已经进行了修改,如有任何进一步的疑问,请回复。
  • 顺便说一句,您也可以在 during 断开连接事件期间向服务器发送数据。但这只是在断开连接之前。参考这个stackoverflow.com/questions/40816355/…
  • current是全局的,可以被覆盖,这意味着如果一个用户登录然后另一个登录并且第一个离开,最后一个用户被踢出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 2012-01-28
  • 1970-01-01
  • 2016-08-11
  • 2014-08-31
相关资源
最近更新 更多