Разработка вопросов на сервере программирования на PHP - PullRequest
2 голосов
/ 23 декабря 2010

Я пытаюсь написать многопользовательскую игру, похожую на Go, и мне было интересно, как люди общаются между игроками на стороне сервера?

Поскольку в php (или на любом другом языке) для этого нет ничего, я мог бы записывать каждый ход в БД и читать его для другого игрока (ов). Но это кажется таким расточительным по следующим причинам -

  • Мне не нужно хранить ходы разных игроков. (если вы не убедите меня, что это абсолютно необходимо)
  • БД будет как тяжелой, так и тяжелой (много ресурсов я могу использовать для чего-то другого)
  • Сейчас нормально хранить вещи в памяти. Я хочу быстро прототипировать это. (Я понимаю, что если я храню вещи в памяти, я теряю всю игру для всех пользователей, если машина мгновенно умирает).

Итак, хотя это другой вариант использования, что делают приложения чата в браузере? Для меня есть определенный случай, когда я пишу в БД, поскольку игра может длиться до 10-15 минут, но для чата она определенно не нужна.

Любое другое программное обеспечение, о котором я должен знать? Могу ли я использовать сервер XMPP (пока не рассматривал это), но работает ли он с обычным стандартным HTTP post / get?

Укажите мне несколько URL, и я проведу исследование оттуда. Спасибо за вашу помощь.

  • Pav

Ответы [ 5 ]

1 голос
/ 26 декабря 2010

Я бы отстаивал XMPP в значительной степени, потому что он решает большинство проблем для вас. Большинство серверов XMPP поддерживают соединение через HTTP (с помощью техники, подобной COMET, известной как BOSH ), есть как минимум две библиотеки чистого Javascript, которые позволяют это прямо из браузера: Strophe.js и JSJaC

Обычно из-за короткого времени маршрутизации сервер XMPP хранит сообщения только в памяти, поэтому не записывает их в базу данных. Большинство серверов поддерживают плагины, поэтому изменение системы, например, на запись перемещений или прозрачное хранение сообщений в базе данных будет возможно позже.

Один из авторов Strophe.js написал книгу, в которой есть глава о написании простой игры для двух игроков (на самом деле Tic-Tac-Toe), так что вы можете проверить это , если вы идти по этому маршруту.

0 голосов
/ 23 декабря 2010

Если бы HTML 5 был запущен и работал, вы бы хотели использовать для этого сокетное соединение с вашим сервером (вы можете сделать это уже с Flash). По сути, на вашем сервере всегда будет работать скрипт-демон, который будет прослушивать определенный сокет и вести список подключенных пользователей, затем, когда на сервер сокетов отправляется сообщение от одного из подключенных пользователей Сервер сокетов проанализирует сообщение и отправит его соответствующим подключенным пользователям. Таким образом, ничего слишком большого не нужно хранить в памяти. Он получит и немедленно отправит обратно сообщения.

Клиент обычно создает постоянное соединение с сервером сокетов и имеет обработчик для получения сообщений, отправленных демоном сервера. Серверные демоны могут быть запущены PHP через командную строку (чтобы он всегда работал и не прерывался). Вы хотели бы создать сценарий оболочки init для своего сервера, который запускает скрипт PHP-демона при загрузке. Вам также потребуется доступ к сокетам из вашего PHP-скрипта (который не разрешен на большинстве общих серверов), то есть вам, вероятно, понадобится VPS (виртуальный частный сервер).

Это та вещь, к которой нас приведет HTML5, но лучше всего пока использовать Flash (или использовать один из менее эффективных методов, который не является действительно асинхронным). Это большой вопрос, поэтому я не могу вдаваться в подробности, но могу, по крайней мере, указать вам правильное направление. Вероятно, есть примеры этого где-то в Интернете.

0 голосов
/ 23 декабря 2010

Я никогда не слышал об этой игре, но, например, веб-игра, такая как Ogame, использует базу данных для хранения движений и прочего.Другие используют плоский файл, но это мне кажется не очень хорошим, так как я много слышал о проблемах безопасности.Несомненно, что хорошо разработанное приложение базы данных намного безопаснее, чем любые другие инструменты.Настоящая проблема в другом: php не создан для игры и, вероятно, никогда не будет.

0 голосов
/ 23 декабря 2010

Я использовал Memcached для подобных вещей. Это очень быстро и не хранит все ходы (просто перезаписать ключи игроков). Это сделает ваши дела приятными и легкими.

В PECL есть две библиотеки PHP Memcached (Memecache и Memcached). Оба прекрасно справляются с работой.

0 голосов
/ 23 декабря 2010

Многие чаты используют плоские файлы.Плоские файлы могут быть правильным выбором для вас.Как и некоторые неортодоксальные варианты использования Memcached.Игры носят временный характер.Таким образом, выполнение тех же действий, которые PHP выполняет для Session, может быть хорошим способом создания паттернов вашей системы.

...