Я создаю многопользовательскую игру на основе веб-браузера. Я определил, что websockets - лучший способ обработки сообщений, учитывая его природу в реальном времени. Клиент использует холст HTML5 для отображения игры и веб-узлов для связи с хостом.
Я решил использовать PHP для размещения игры, поскольку, по-видимому, он предпочитает хостинг-провайдеров. Я раньше не использовал PHP, но делал подобные вещи с помощью websockets в Java, но в значительной степени полагался на многопоточность.
Я смотрел несколько руководств по php-сокетам с несколькими клиентами; но большинство из них делают такие вещи, как fork, от новых процессов для каждого клиента. Поскольку у меня будет постоянно запущенный игровой цикл, я не думаю, что это подходит.
То, что я пытаюсь достичь, - это способ назначения портов каждому клиенту при их подключении, прослушивании новых клиентов, обмене данными с текущим списком клиентов и запуске игрового цикла.
Где мне нужна помощь:
- Как найти и назначить порты новым клиентам, уведомить клиента этого порта и очистить его при отключении.
- Как сделать вышеуказанное и все другие транзакции сокетов, не блокируя игровой цикл. Было бы приемлемо принимать сообщения от клиентов в частичных фрагментах и действовать только с полным сообщением.
Может ли кто-нибудь дать мне некоторые технические советы о том, как достичь этих целей? Я не думаю, что все это выглядит слишком много, чтобы спросить PHP, но исправьте меня, если я ошибаюсь!
Некоторое псевдокод того, что я хотел бы достичь на сервере. Ни одна из функций не должна блокироваться: Клиенты массива;
while(gamerunning)
{
CheckForNewClients();
GetStatusFromClients();
DoGameUpdate();
SendGameStateToClients();
}
[Обновление] Для всех, кого это интересует, я создал специальное приложение, поддерживающее веб-сокеты (в частности, используя Java и "TooTallNates" ), а не фактический веб-сервис, поскольку, похоже, он имеет больше смысла, хотя, кстати, кажется, что большинство веб-браузеров с тех пор сокеты в корзине из-за проблем с безопасностью.