Socketio获取房间中的客户数量

时间:2018-10-21 20:24:09

标签: javascript node.js json sockets socket.io

我想寻求您的帮助。我很难使用此功能。它应该检查会议室内部是否有0个或1个客户端,然后提供有关另一个客户端是否可以加入会议室的信息(每个会议室最多2个用户)。 我没有关于增加房间中客户数量的想法。我已经检查了该站点,并且使用较早版本的socket.io有很多关于此主题的答案。现在我来到了这个功能:

 io.in(room).clients((err, clients) => {
  console.log(clients.length);
});

它可以正常工作并在房间内记录正确数量的客户,但是我不知道如何将该值返回给外部函数。

var user由一个完整的JSON组成,我一直在想是否有一种更快速的方法来返回数组的长度而无需深入研究JSON。

有外部功能:

function isRoomFree(room) {
    var user = io.in(room).clients((err, clients) => {
      console.log(clients.length);
    });
   //console.log(user);
    if(user < 2)
        return true;
      else
        return false;
  }

有没有办法做到这一点?我对js,socketio和node.js有点陌生

1 个答案:

答案 0 :(得分:0)

您的函数isRoomFree(room)本质上是同步的,这意味着您调用它并等待结果,而io.in(room).clients是异步的,这意味着您不知道结果何时到达。

混合其中两个提出了挑战。

您需要做的就是将功能更改为异步。我建议您熟悉这个概念。

function isRoomFree(room, callback) {
    var user = io.in(room).clients((err, clients) => {
       if(clients < 2)
         callback(true);
      else
         callback(false);
    });
}

像这样使用它:

isRoomFree(room, function(status) {
   if (status)
      console.log("free");
   else 
      console.log("not free");

   //continue your program logic inside the callback
});