Это будет довольно долгий и сложный запрос, состоящий из нескольких вопросов, так что, пожалуйста, будьте терпеливы.
Я относительно новичок в веб-разработке и в настоящее время работаю над многопользовательской браузерной онлайн-игрой на основе рефлексов, в которой игроки управляют аватарами и сражаются с ними с помощью клавиш WASD. Из-за своей рефлекторной природы пагубно то, что игроки получают в реальном времени обновления о действиях своих врагов с задержкой, не превышающей нескольких миллисекунд.
(ДЛЯ TL; DR НЕ ЧИТАЙТЕ ЭТОТ ПАРАГРАФ ..)
Однако я только недавно открыл для себя концепцию веб-сокетов и socket.io. Я знаю, что это, скорее всего, лучший метод для его создания, однако я не знаком с node.js, и я уже построил ядро своей игры на PHP (регистрация, макет, управление базой данных, организация очереди для поиска игроков и т. д.), что означает, что если я буду реализовывать веб-сокеты, мне нужно будет не только изучить совершенно новую технологию, но и переписать в ней весь свой бэкэнд ... ИЛИ, я могу использовать как PHP, так и node.js, но я бы мне нужно открыть свой node.js на очень неудобном порту (поскольку 80 и 443 уже используются xampp), что может вызвать неудобства для многих моих потенциальных пользователей. Кроме того, я планирую использовать провайдера веб-хостинга, и я не уверен, поддержат ли они это вообще. (а? Это серьезная проблема?)
(ПРЯМО К СУТИ:) Я уже написал код с коротким и длинным опросом:
В моем коде короткого опроса клиент отправляет запрос AJAX каждые 30 миллисекунд, который извлекает игровой сеанс из базы данных и проверяет, может ли клиент обновить свои собственные координаты (клиент не может обновлять свои координаты дважды подряд, только после того, как их Враг сделал это, поэтому, если у одного клиента есть пинг, игра тормозит для обоих клиентов), и всякий раз, когда он нажимает (или отпускает) клавиши WASD, отправляется запрос AJAX для обновления базы данных с его перемещениями.
В моем коде с длинным опросом клиент отправляет запрос AJAX с просьбой изменить движение своего противника. Сервер сохраняет текущее движение противника и застревает в цикле while, в то время как движение противника остается прежним, постоянно запрашивая MYSQL о любых новых движениях. Как только клиент нажимает (или отпускает) клавишу, он отправляет запрос AJAX со своими координатами и своим новым перемещением, после чего база данных обновляется, цикл while другого клиента прерывается, и сервер возвращает слушающему клиенту новый движущийся клиент. состояние вместе с их координатами (чтобы учесть любую возможную задержку, которую другой клиент мог испытать во время ожидания, что может вызвать расхождения в координатах его врага). А пока игра запускается для обоих игроков на чистом Javascript.
Кажется ли, что обе эти альтернативы слишком сильно нагружают сервер? Должен ли я АБСОЛЮТНО использовать socket.io, чтобы иметь возможность запускать такую игру с приемлемым трафиком сервера, или я могу позволить себе придерживаться PHP? Могу ли я без проблем использовать socket.io + серверную часть PHP с провайдером веб-хостинга?
Я осознаю, что я о многом спрашиваю и заранее прошу прощения, если мой вопрос слишком длинный / расплывчатый. Спасибо всем за их вклад!
Я понимаю. Что бы вы тогда порекомендовали; какие у меня есть варианты? Создать мою игру с помощью веб-сокетов и разместить ее на персональном компьютере?
Я не могу посоветовать, где вы его разместите, есть много вариантов. Возможно, все они находятся за пределами вашей зоны комфорта, и вам, возможно, придется кое-что узнать об администрировании серверов, но все это выполнимо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Миллисекундная задержка в открытом Интернете достаточно сложна для высокооптимизированного нативного кода, это довольно сложно для JavaScript в браузере. Любая дополнительная миллисекунда, которую вы тратите на просмотр базы данных и обратно, только ухудшает ситуацию. Вы абсолютно хотите, чтобы сервер работал исключительно в памяти и немедленно отправлял данные в сокеты. Это может быть реализовано с использованием практически любого языка, включая PHP, но это немного другая структура приложения, чем ваша типичная страница PHP-MySQL, и не будет работать вообще на типичном виртуальном хостинге.