Socketio Получить количество клиентов в номере - PullRequest
0 голосов
/ 21 октября 2018

Я хотел бы попросить вас о помощи.Мне тяжело с этой функцией.Он должен проверить, есть ли в комнате 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 голосов
/ 24 октября 2018

Ваша функция 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...