Задать вопрос
Twitt
@Twitt

Цикл while блокирует запросы других пользователей, почему и как обойти?

я хочу сделать режим в небольшой игре
допустим пользователь ищет игру с кем-либо, делает определенный запрос для поиска игры. В скрипте есть цикл:
$attempts = 0;
while (!($rival = $this->db->getOneUserWhoSearchingGame()) || $attempts < 10) {
            $attempts++;
        }

В это же время другой пользователь делает запрос для поиска игры, и по идее должно выйти из while, по скольку должен будет найтись соперник (переменная $rival заполнится). Но нет, когда второй пользователь пытается сделать запрос, скрипт просто никак не отреагирует, пока не умрет (или attempts не будет равно 10).
Почему так происходит? Как такое обойти?
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@dedalqq
во-первых: не ясно как работает метод getOneUserWhoSearchingGame и как вы шарите данные о пользователях между клиентскими сессиями. В php каждая сессия изолированна от другой. Немногое, что можно тут придумать, это использовать базу, кэш, или какой то другой внешний ресурс.
Во-вторых: такие вещи очень странно писать на php. php хорошо, для чего то простого, когда к вам пришли с каким то запросом, вы его тут же отработали и все. Так что я бы вам ооочень порекомендовал отказаться от php и посмотреть на что то другое, например: Go, Python, Java... даже, не худой конец NodeJS прости госпади =)
На php конечно можно это сделать, но это будет мир костылей
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽