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