Какую технологию групповых сообщений использовать? - PullRequest
6 голосов
/ 16 февраля 2009

Я немного растерялся - около 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).

Есть идеи / предложения?

Ответы [ 5 ]

3 голосов
/ 16 февраля 2009

Юрий

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, с «прямыми» обменами.

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

Любой издатель (член группы) отправляет брокеру сообщение с «ключом маршрутизации», таким как «yurii». RabbitMQ сопоставляет этот ключ с привязками подписки в таблице маршрутизации (также называемой «обмен») для вас. Каждая привязка представляет подписку по очереди, выражая интерес к сообщениям с заданным ключом маршрутизации. Когда ключи маршрутизации и привязки совпадают, сообщение затем направляется в очереди для последующего потребления клиентами (членами группы). Это работает для случаев 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)

Пожалуйста, смотрите код ACL для этого (ссылка выше). Существует также 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 вы создаете шаблоны маршрутизации с использованием подписок. Вы можете пнуть определенных клиентов, отправляя им сообщения с помощью любого ключа, который они использовали для привязки своей очереди потребления к обмену.

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

Alexis

1 голос
/ 16 февраля 2009

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

http://www.smartfoxserver.com/

1 голос
/ 16 февраля 2009

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

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

1 голос
/ 16 февраля 2009

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

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

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

0 голосов
/ 16 декабря 2009

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

...