В принципе, любая программная платформа столкнется с этой проблемой.Большинство, как вы уже поняли, решают это с помощью потоков.Хотя многопоточность возможна в PHP.Требуется MAJORHAXXX.Например, запуск php-потока из командной строки из php.
Это действительно не значит, что он идеален.
Однако есть и другие способы обойти это.
Но сначала вам нужно проверить ВСЕ метки в этом списке:
[] - моей игре не нужно постоянно проверять сервер, например, на предмет местоположения игрока или сложные движения.Все, что выходит за пределы уровня передачи данных и скорости обновления в чате, должно быть оставлено не отмеченным.
[] - СЕРВЕР не должен ничего рассказывать о моей игре.Для клиента вполне приемлемо запрашивать все, что ему нужно, возможно, раз в секунду или, что лучше, раз в минуту.
[] - Моя игра не нуждается в постоянной симуляции работы сложного мира.на сервере дольше, чем требуется для выполнения запроса.Отслеживание чата - это одно, а внесение изменений в физику и графику - другое.
Если вы отметили все эти флажки, то PHP все еще в игре!Иначе.Не беспокойтесь.
По сути, я говорю здесь о том, что PHP отлично подходит для игр, которые на самом деле не являются многопользовательскими, и являются пошаговыми или, по крайней мере, не очень интерактивными.Но как только вы продолжаете работать без игрока, PHP падает на ноги.
УРОВЕНЬ ВУДОО
Но если вы просто ДОЛЖНЫ сделать это.Существуют способы обойти это.
A - Создайте PHP-демон, управляющий вашим миром, перенаправьте весь остальной трафик в файл запроса получения или установки, который взаимодействует с базой данных.Таким образом, вы можете запросить получение состояния игрового мира или установить значение, которое выполнил игрок.Все остальные вещи, связанные с игровым миром, могут обрабатываться демоном, а сама игра происходит в базе данных.
B - Используйте cron, а не Daemon.(опасно, но мы уже установили, что вы рискуете, верно?)
C - ПОПРОБУЙТЕ только Демон и слушая сокеты, затем отправляя потоки (через exec ()) для ответа.Вроде как идея АндреКР выше, только вам не нужно спать.Проблема здесь в том, что вы почти всегда будете в конечном итоге пропускать вещи или иным образом отрезаться.И все это может взорваться, если Демон побежит как-то дважды ..