PHP AJAX многопользовательская игра - PullRequest
2 голосов
/ 23 июля 2011

Я планирую относительно простую многопользовательскую онлайн-игру, и я не знаю, что использовать для общения между игроками.

Детали игры:

  • 6 игроков
  • Окно чата
  • 30 секундных раундов (антракты)
  • Синхронизация времени важна

Игроки выбирают и действие, и в конце раунда действие выполняется, появляется краткий перерыв для детализации действий и начинается новый раунд.

Я решил построить эту игру полностью на JS и PHP (конечно, AJAX). Я просто не знаю, что мне следует использовать для взаимодействия между клиентом и клиентом. Сначала я планировал использовать постоянные 1/2-секундные вызовы AJAX для PHP-скрипта с использованием mySQL для хранения данных игры / пользователя, но я боюсь, что это быть слишком медленным и непредсказуемым.

Я подумал о том, чтобы использовать что-то вроде XML вместо mySQL и использовать что-то вроде функции php fopen () - что вы, ребята, думаете об этом?

Я прочитал в этом вопросе здесь , где автор рассматривает возможность использования XMPP, это может быть хорошим решением?

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

Есть предложения по синхронизации времени раунда? Или это то, что мне действительно нужно беспокоиться?

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

Ответы [ 3 ]

2 голосов
/ 24 июля 2011

Перейти на комету, вам не нужны сокеты.Комета - это своего рода обратный AJAX.Прекрасно работает для таких p2p-вещей, как, например, мессенджер, потому что он отправляет данные в браузер без необходимости постоянно опрашивать сервер.И есть много реализаций Comet в JS / PHP, только Google.Затем, в качестве бэкэнда, вы можете использовать MySQL или XML или что угодно, но я бы посчитал MySQL лучшим решением, потому что XML - это просто текстовый файл, который нужно открывать, читать, записывать и закрывать, а база данных разработаначтобы быть быстрее, чем это).

2 голосов
/ 23 июля 2011

Если вы решили использовать PHP / JS / Ajax, я бы посоветовал вам прочитать об использовании функции PHP usleep () для отсрочки возврата результатов вызова ajax до тех пор, пока на сервере не появится что-то сказать. Это должно привести к гораздо более быстрому взаимодействию сервера с клиентом.

Я сам этого не делал, но я думаю, что основной принцип заключается в том, что вы можете задерживать от 5 до 10 секунд на ajax-вызов, выполняя новый вызов всякий раз, когда происходит один раз или возвращается с сервера с данными.

Кроме того, я бы рекомендовал инфраструктуру javascript (например, jQuery ), чтобы сделать вызовы ajax более управляемыми.

1 голос
/ 23 декабря 2012

Я также создаю игру с использованием JS / PHP, и вот мой план: иметь простой текстовый файл на сервере.Всякий раз, когда пользователь выполняет действие, которое необходимо отправить на сервер, он отправляет XMLHttpRequest в скрипт php, который добавляет действие к файлу (например, если пользователь запускает ракету из Майами в Москву, он пишет «Запустить Майами»Москва "в архив).Чтобы проверить, когда другой человек что-то делает, вы открываете запрос XMLHttpRequest для другого скрипта PHP, а когда скрипт PHP возвращает что-то, вы записываете, что он возвратил, и снова открываете соединение.Этот PHP-скрипт проверяет наличие изменений в файле и возвращает содержимое файла, когда оно действительно изменяется.Вот файл PHP, который проверяет наличие изменений:

<?php
#First, set infinite time limit
set_time_limit(0);
#record last modification time
$f1=filemtime('./nameoffile.txt');
#wait until the file changes
while($f1===filemtime('./nameoffile.txt'){
    #have a 10,000 microsecond break between each check so you do not use too much resources
    usleep(10000);
readfile('./nameoffile.txt');
?>

Вы также можете посмотреть HTML5 WebSockets.Я не использую их и не знаю, работают ли они с PHP, но они кажутся интересными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...