Socketio Получить количество клиентов в номере

1

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

  • 0
    Можете ли вы просмотреть ответ @yoozek оставьте комментарий, если он не работает для вас, или примите его, если он работает
Теги:
sockets
socket.io

1 ответ

0

Ваша функция isRoomFree(room) по существу синхронна, то есть вы вызываете ее, и вы ждете результата, однако io.in(room).clients асинхронно, что означает, что вы не знаете, когда результат прибудет.

Смешивание двух из них представляет проблему.

Что вам нужно сделать, так это изменить свою функцию, чтобы стать async. Я предлагаю вам ознакомиться с концепцией.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню