Twitt
@Twitt

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

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

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

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

Похожие вопросы