Какой из них я должен выбрать AMQP или XMPP для браузерной игры в реальном времени?


Я выбираю между AMQP (RabbitMQ) и XMPP (ejabberd) для моей браузерной пошаговой игры без flash на javascript в режиме реального времени. Я мало что знаю о протоколе AMQP и XMPP. Я хотел бы использовать PHP для авторизации пользователей и извлечения некоторых данных из хранилища с помощью MySQL. Насколько я выяснил, у RabbitMQ есть PHP-клиенты, но у eJabberd их нет.

Я понял, что клиент javascript вызывает PHP-скрипт и управляет необходимой обработкой, а затем передает ее на сервер AMQP или XMPP для передачи данные игроку противника. Есть хорошая книга "Pro XMPP программирование с JS и jQuery" от Wrox, но в ней нет примера с PHP. Итак, ниже приведены мои вопросы.

1) Какой протокол подходит для моей игры?

2) Должен ли я выбрать RabbitMQ только для поддержки клиентов PHP?

Author: Devyn, 2010-05-30

3 answers

Я довольно успешно реализовал клиент XMPP на Javascript, используя подход HTTP-привязки к XMPP BOSH. Я не знаю насчет AMQP, но для доступа на стороне клиента мне нравится XMPP. Несколько слов о том, почему.

Ejabberd уже включает поддержку BOSH, и для использования с Javascript (и, предположительно, Flash) вам просто нужно направить свой сервер на перенаправление запросов на порт, на котором вы настроили ejabberd для прослушивания HTTP-запросов. (И даже это только потому, что модель безопасности Javascript в современные браузеры запрещают запросы Javascript к разным доменам и даже разным портам.)

Поскольку XMPP - это набор довольно тривиальных небольших XML-документов, их должно быть довольно легко кодировать на любом выбранном вами языке.

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

Реализация XMPP означает, что вы можете просто добавить поддержку обмена мгновенными сообщениями в свою игру, с объединение с остальной частью сети Jabber (включая Google Talk).

Поскольку я ничего не знаю об AMQP, я не могу их сравнивать, но я могу сказать, почему я всегда в первую очередь рассматриваю XMPP для своих будущих многопользовательских проектов.


Моя личная причина выбора ejabberd проста - его очень легко установить и настроить в Debian. Я почти полностью не знаком с Erlang и Java; однако, что я понимаю в Erlang, так это то, что он упрощает масштабируемость, и ejabberd люди говорят, что они достигли этого.

Если вы хотите выполнить проверку логики на стороне сервера, боюсь, я не знаю ни одного хорошего метода. Я бы использовал PHP-скрипт прокси-сервера, проверяющий разумность входящего сообщения XMPP BOSH, а затем перенаправляющий его на сервер, вместо того, чтобы просто пересылать его через Apache mod_rewrite.

Как упоминалось выше, вам определенно придется выполнять какое-либо проксирование (с помощью mod_rewrite или с помощью PHP или каким-либо другим способом), так как сервер XMPP будет прослушивать другой порт, отличный от "основного" веб-сервера, а междоменная модель безопасности Javascript не позволяет выполнять XMLHTTPRequest на другом порту.

Таким образом, проверка работоспособности может быть проще всего выполнена при передаче запросов BOSH на сервер XMPP по вашему выбору. Копание в серверном программном обеспечении может быть не лучшим способом проведения такого рода проверок. Это займет много времени и, вероятно, затруднит интеграцию с остальной частью вашей игры.

В качестве альтернативы я наткнулся на ответ, в котором упоминается XMPP компоненты и модули ejabberd. Для меня это тоже будет интересным чтением.

Удачи, и не забудьте оставить комментарий с названием игры, когда она будет закончена - я бы с удовольствием посмотрел ее:-)


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


Об использовании XMPP с Flash:

Тем не менее, вы можете использовать привязку HTTP (BOSH) с Flash. На самом деле, в то время как HTTP привязка позволяет Javascript получать доступ к XMPP, она была задумана для различных приложений, таких как мобильные соединения, которые часто могут прерываться.

В основном я выяснил, как установить соединение, наблюдая за связью между веб-клиентом JWChat и ejabberd (для получения информации о BOSH), а затем за связью между кроссплатформенным клиентом Psi и ejabberd (для получения информации о самом протоколе). С помощью JWChat и веб-инспектора WebKit или Firebug для Firefox можно легко отслеживать XMLHttpRequests выполняется в направлении сервера. С помощью Psi можно включить консоль XML и прочитать журнал сообщений. В сочетании с прототипированием клиента на выбранном вами языке изучение BOSH и XMPP оказалось очень простым.

Также полезны следующие XEP: XEP-0124, ХЕП-0206.

Книга О'Рейли, которую я сейчас читаю, "XMPP: Окончательное руководство" (П.Сент-Андре, Кевин Смит, Ремко Тронсон; намного дешевле в приложении Apple Магазин) также дает вам представление о том, "почему все делается так, как есть", и документирует множество мелких вещей и различные приложения XMPP.

После этого внедрение клиента на основе BOSH может оказаться довольно простым. У меня нет опыта в кодировании с помощью Flash, кроме как нажимать кнопку воспроизведения и паузы, так что отнеситесь к этому с долей серьезности:-)

 9
Author: Ivan Vučica, 2017-05-23 11:45:09

Как кто-то уже упоминал, вам нужно рассмотреть часть "клиент-сервер"; это кажется более важным.

Похоже, у вас уже есть лучшая книга на эту тему (книга Джека Моффита XMPP + JS), и я бы определенно сказал, что это технология, с которой нужно работать.

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

Хотя я не могу рекомендовать никаких клиентов PHP-XMPP, я не думаю, что у вас обязательно будет тот же уровень функций, что и у AMQP.

Кроме того, если вы разбираетесь в других языках и в зависимости от объема требуемой игровой логики, вы можете написать серверный компонент XMPP. Смотрите этот предыдущий вопрос о XMPP+ играх для получения дополнительной информации:
Взаимодействие XMPP C#

 1
Author: Christopher Orr, 2017-05-23 12:07:07

AMQP еще не достиг версии 1.0 и имеет некоторые возможные проблемы с дизайном. Есть клиенты XMPP для PHP, так что на вашем месте я бы сначала попробовал.

 1
Author: Rob Young, 2011-07-01 09:24:19