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

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

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

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

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

3 ответов


у меня был довольно хороший успех в реализации клиента XMPP в Javascript, используя подход http Bind к XMPP BOSH. Я не знаю об AMQP, но для доступа на стороне клиента я люблю XMPP. Несколько слов почему.

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

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

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

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

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


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

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

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

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

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

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


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


при использовании XMPP со вспышкой:

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

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

кроме того, следующие XEPs полезны:XEP-0124, XEP-0206.

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

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


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

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

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

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

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


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