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