Javascript и PHP для многопользовательской игры в реальном времени? [закрыто]

13

Мне интересно, если объединение клиентской части Javascript с серверной стороной PHP / mysql является хорошей идеей для многопользовательских (небольших) браузерных игр HTML5 в реальном времени?

Мои технические знания очень ограничены, и, хотя я планирую изучать node.js в будущем, кривая обучения сейчас довольно велика.

Поскольку я уже знаком с PHP, я чувствую, что он заработал бы намного быстрее.

Шкала, я думаю, составляет 2-8 игроков в то время. И пытаться поддерживать как можно меньше сообщений от клиента к серверу.

Значения, которые я намерен хранить / обрабатывать:

  • Имя игрока и ID.
  • X и Y позиции.
  • Здоровье.
  • Оборудованные предметы (максимум 8 слотов, возможно меньше).
  • Действия (ходьба, атака, использование и т.д., но только 1 действие / игрок за один раз).
  • Пуля X, Y координаты и траектория.
  • Название гильдии / клана.
  • И некоторые основные функции чата / рассылки.

Я думаю, что хотя это и не лучшее решение, но, хотя я придерживаюсь небольшой логики, это вполне выполнимо. Я прав?

justanotherhobbyist
источник
4
Звучит вполне выполнимо. Почему бы тебе просто не попробовать? В худшем случае, вы тратите некоторое время на изучение, в лучшем случае вы получаете именно то, что хотите.
Уильям Мариажер
1
Да, но я думаю, что это займет некоторое время, и я не люблю тратить время, вот почему я спросил здесь. =)
justanotherhobbyist
8
Если вы чему-то научитесь, время не пропадало. ;) Стоит учесть, что если вы переключите язык, вы потратите время на изучение нового языка и изучение сетей одновременно, что означает гораздо больше отладки, чтобы найти, где вы ошиблись. Если вы придерживаетесь того, что знаете, то сначала изучите сетевое взаимодействие, а затем сможете портировать его, если оно окажется неэффективным, и в следующий раз, когда кто-то задаст аналогичный вопрос, вы узнаете правильный ответ, потому что вы его протестировали.
Уильям Мариажер
1
Это на самом деле хороший момент
justanotherhobbyist

Ответы:

12

Для игры в реальном времени вы хотите минимизировать задержку. Вот два совета для достижения этого, с примечаниями о PHP и Node:

  1. Используйте WebSockets. Они обеспечивают быструю двустороннюю связь между сервером и клиентом. Преимущество использования node.js в том, что вы можете использовать один и тот же API-интерфейс JavaScript на обоих концах канала. Есть также замечательный модуль socket.io для node.js, который предоставляет резервные технологии для небольших браузеров, которые не поддерживают WebSockets. Погуглив немного, кажется, вы также можете использовать WebSockets из PHP, если вы действительно этого хотите.
  2. Не включайте базу данных в критичные по времени данные, такие как координаты быстро движущихся объектов. Это означает, что они должны храниться в памяти, что не очень хорошо подходит для традиционной модели использования PHP, когда он запускается один раз для каждого запроса к Apache (или любого другого веб-сервера), но вы можете запустить свое приложение PHP-сервера также как автономное. Я предполагаю, что Node с его ядром V8 будет работать быстрее, чем PHP . Вопрос в том, насколько требовательна ваша игра и насколько мощен сервер.

Я сам нахожу, что node.js очень легко подобрать, и, так как вам все равно понадобится код JavaScript, я бы порекомендовал вам попробовать. По крайней мере, взгляните на руководства по socket.io, чтобы увидеть, как просто настроить канал связи в реальном времени.

Тапио
источник
+1 за точку 2. Самая большая ошибка, которую вы можете сделать с этим, - ожидать, что запросы MySQL будут срабатывать при каждом событии. Все, что вы можете сделать, чтобы удалить данные игры с жесткого диска, поможет. Я имел успех с злоупотреблением Memcached для этого. Есть, несомненно, другие пути.
DampeS8N
Да, я действительно хочу выучить нод, но мне еще только предстоит запустить его из cmd, самая большая ошибка, которую сделали разработчики, заключалась в том, чтобы сделать его таким сложным. По крайней мере, теперь версия для Windows поставляется с установщиком, может попробовать, если я найду хороший учебник.
justanotherhobbyist
Узел совсем не сложно запустить или использовать. Да, сложнее, чем PHP, но PHP платит ужасную цену за его удобство - дизайн, позволяющий встроить его в Apache и по умолчанию везде без настройки, также вызывает множество проблем, которые делают PHP совершенно и абсолютно худшим выбором для вас. может сделать в режиме реального времени игровой сервер. Node, Python, Ruby, Java и т. Д. Требуют, чтобы вы настроили сервер приложений, но эта модель позволяет очень масштабируемую управляемую событиями обработку в памяти, которую в PHP практически невозможно достичь.
Шон Мидлдитч
1

Наряду с ответом Тапио, я хотел бы предложить только (если возможно) отправлять пользовательский ввод (щелчки и ввод с клавиатуры) на сервер, и сервер и клиент будут эмулировать игру. Каждые N отметок, которые клиент будет запрашивать у сервера для синхронизации, и сервер будет отвечать всей информацией, необходимой клиенту для отображения игры, такой как здоровье, предметы и т. Д. Это делается для того, чтобы клиент тоже не был десинхронизирован. много.

Конечно, и сервер, и клиент должны иметь одинаковую реализацию игры, так что это может быть немного больше работы. Если у вас есть идеальные реализации как на клиенте, так и на сервере, клиент должен будет синхронизироваться реже.

Это уменьшит обмен сообщениями между клиентом и сервером и уменьшит задержку. Это также поможет предотвратить мошенничество.

Предполагая, что вы создаете эту игру на JavaScript, возможно, стоит написать и бэкэнд на JavaScript, используя NodeJS. Таким образом, вы можете повторно использовать реализацию JavaScript вашей игры как для сервера, так и для клиента.

art0rz
источник
0

Я рекомендую изучать Nodejs. Если вы уже сейчас Javascript, это не будет так сложно. Я быстро создал многопользовательскую игру TRON с Nodejs, и это был мой первый день, когда я ее использовал. (О, и клиент был холстом HTML5; я только отправлял ввод с клавиатуры, как упомянуто в других комментариях.)

Посмотрите на модуль под названием nowjs. Удачи!

Давид да Силва Контин
источник