Я довольно успешно внедрил 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, за исключением того, что я нажимаю кнопку и делаю паузу, так что возьмите это с долей соли: -)