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