首页 > 解决方案 > Socketio 获取房间内的客户端数量

问题描述

我想请你帮忙。我很难使用这个功能。它应该检查房间内是否有 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 有点陌生

标签: javascriptnode.jsjsonsocketssocket.io

解决方案


您的函数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
});

推荐阅读