Какую технологию группового обмена сообщениями использовать?

StackOverflow https://stackoverflow.com/questions/551900

  •  23-08-2019
  •  | 
  •  

Вопрос

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

В принципе, то, что мне нужно, это:

  • создание групп (с помощью некоторого серверного процесса)
  • широковещательные сообщения любым клиентом (1:N, N:N)
  • (потенциально) прямые сообщения (1:1)
  • (важно) аутентифицировать / авторизовывать клиентов с помощью моего собственного бэкэнда (скажем, через какой-нибудь HTTP API)
  • чтобы иметь возможность запускать определенные клиенты с помощью серверного процесса (или серверного плагина)

Вот что у меня будет:

  1. Связанные с серверной частью процессы либо в Ruby, либо в Haxe
  2. Интерфейс на JS + Haxe (Flash9) — в браузере, так что в идеале связь через 80/443, но не обязательно.

Таким образом, эта технология должна быть легко доступна в Haxe для Flash и предпочтительно Ruby.

Я тут думал о:RabbitMQ (или OpenAMQ), RabbitMQ + STOMP, ejabberd, ejabberd + BOSH, juggernaut (для этого нужно написать библиотеку Haxe).

Есть какие-нибудь идеи / предложения?

Это было полезно?

Решение

Если вы собираетесь заниматься разработкой Flash, смотрели ли вы на SmartFoxServer?В нем есть все, что вы хотите, и собственные клиентские библиотеки Flash.Я использовал in в проекте для управления десятками тысяч подключенных пользователей.

http://www.smartfoxserver.com/

Другие советы

Юрий,

RabbitMQ, Haxe и as3: http://geekrelief.wordpress.com/2008/12/15/hxamqp-amqp-with-haxe/

RabbitMQ, Ruby и ACL: http://pastie.org/pastes/368315

Возможно, вы также захотите рассмотреть возможность использования Nanite с RabbitMQ для управления серверными группами: http://brainspl.at/articles/2008/10/11/merbcamp-keynote-and-introducing-nanite

Вы говорите, что вам нужно:

* broadcast messages by any client (1:N, N:N)
* (potentially) direct messages (1:1)

Вы можете легко сделать и то, и другое с помощью RabbitMQ.RabbitMQ поддерживает оба варианта обмена сообщениями 1: N на pubsub и 1: 1 с "прямым" обменом.

Схема прямого обмена выглядит следующим образом:

Любой издатель (член группы) отправляет брокеру сообщение с "ключом маршрутизации", таким как "юрий".RabbitMQ сопоставляет этот ключ с привязками подписки в таблице маршрутизации (она же "exchange") для вас.Каждая привязка представляет собой подписку по очереди, выражающую заинтересованность в сообщениях с заданным ключом маршрутизации.Когда ключи маршрутизации и привязки совпадают, сообщение затем направляется в очереди для последующего использования клиентами (членами группы).Это работает для случаев 1: N и 1:1;с N: N, построенным на 1:N.

Введение в модель маршрутизации: http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/

Общее вступление: http://google-ukdev.blogspot.com/2008/09/rabbitmq-tech-talk-at-google-london.html

Вам также требуется:

* (important) authenticate/authorize clients with my own backend (say, through some kind of HTTP API)

Пожалуйста, ознакомьтесь с кодом ACLs для этого (ссылка выше).Существует также HTTP-интерфейс для RabbitMQ, но мы еще не объединили HTTP-интерфейс с кодом ACL.Однако это не должно сдерживать ойю.Пожалуйста, зайдите в список rabbitmq-обсудить, где недавно обсуждалась эта тема.

Вам также требуется:

* create groups (by some backend process)
* to be able to kick specific clients by backend process (or server plugin)

Я предлагаю посмотреть, как такие инструменты, как Nanite и Workling, делают это.Создание групп обычно не является частью системы обмена сообщениями, вместо этого в RabbitMQ вы создаете шаблоны маршрутизации с использованием подписок.Вы можете выгнать определенных клиентов, отправив им сообщения с помощью любого ключа, который они использовали для привязки своей очереди потребления к exchange.

Надеюсь, это поможет!

алексис

Что ж групповое общение это немного другой зверь, чем простой обмен сообщениями / постановка в очередь.

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

Тем не менее, оба из них могут быть сложными для поиска привязок Ruby.Spread и, вероятно, OpenAIS рассматривают клиентов как доверенных, поэтому браузерный клиент не имеет смысла.Вам нужно было бы, чтобы интерфейсы вашего браузера взаимодействовали с групповыми клиентами на серверной части.

Мы использовали ActiveMQ.Наш поставщик, который поставляет нашу кадровую систему, использует Ruby / ActiveMQ для трансляции и получения обновлений.

http://activemq.apache.org/cross-language-clients.html

Другими брокерами сообщений с открытым исходным кодом, поддерживающими протокол Stomp, являются OpenMQ, который включен в GlassFish V3 и GlassFish 2.1.1, но также работает автономно, и вскоре появится брокер сообщений JBoss, HornetQ V2.1.OpenMQ поддерживает временные очереди, которые полезны для обмена данными в стиле RPC, но ActiveMQ также предлагает некоторые интересные функции в адаптере Stomp.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top