Какой из них я должен выбрать AMQP или XMPP для браузерной игры в реальном времени? - PullRequest
6 голосов
/ 30 мая 2010

Я выбираю между 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 ]

9 голосов
/ 09 октября 2010

Я довольно успешно внедрил XMPP-клиент в Javascript, используя подход HTTP Bind к 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 Web Inspector или Firebug для Firefox можно легко отслеживать запросы XMLHttp, выполняемые на сервер. С помощью Psi можно включить консоль XML и прочитать журнал сообщений. В сочетании с прототипированием клиента на выбранном вами языке изучение BOSH и XMPP оказалось очень простым.

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

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

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

1 голос
/ 31 мая 2010

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

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

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

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

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

1 голос
/ 30 мая 2010

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

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