RabbitMQ против Socket.io? - PullRequest
       26

RabbitMQ против Socket.io?

46 голосов
/ 09 июля 2011

Я занимаюсь разработкой веб-приложений в реальном времени.

Пользователи браузера должны иметь возможность общаться друг с другом через сервер node.js.Один из пользователей пишет сообщение, и все другие пользователи получают его.

Я не совсем понимаю, как работает RabbitMQ.Но из быстрого чтения кажется, что он обрабатывает публикацию / подписку сообщений.

Пользователь (в браузере) публикует что-то, и подписчики (в других браузерах) получают это сообщение.Разве это не то, что Socket.io делает с веб-сокетами?

Вот мои вопросы:

  1. Каковы преимущества / недостатки каждого из них?
  2. Может ли Socket.io заменить RabbitMQ?
  3. Существуют ли сценарии, в которых мне нужен RabbitMQ для веб-приложений, где Socket.io не достаточно?

Ответы [ 3 ]

60 голосов
/ 09 июля 2011

Обновление

Существуют ли сценарии, в которых мне нужен RabbitMQ для веб-приложений, когда Socket.io не достаточно?Пользователи браузера должны иметь возможность общаться друг с другом через сервер node.js.Один из пользователей пишет сообщение, и все остальные пользователи получают его.

Если у вас есть только эти простые требования, достаточно будет только socket.io. .Вам нужно только сообщение queue , когда вы хотите обрабатывать свои задания (тяжелые) в автономном режиме и контролируемым образом.

http://en.wikipedia.org/wiki/Message_queue:

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

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

Это делает структуру данных FIFO первым в очереди.

Это я считаю важным свойством очереди.Свойство First-In-First-Out, хотя с расширенной очередью сообщений, такой как beanstalkd, вы можете назначать приоритеты заданий.

Надеюсь, это вообще имеет какой-то смысл;)


Я занимаюсь разработкой веб-приложений в реальном времени.

Не могли бы вы объяснить немного лучше, чтобы мы могли дать вам лучший ответ?

Не знаюпонять, как работает RabbitMQ.Но из быстрого чтения кажется, что он обрабатывает публикацию / подписку сообщений.

См. Цитату об очереди сообщений ниже.Позвольте этому погрузиться на некоторое время.Вы также можете прочитать WIKI о очередях сообщений .

Пользователь (в браузере) публикует что-то, и подписчики (в других браузерах) получают это сообщение.Разве это не то, что Socket.io делает с веб-сокетами?

Socket.io поддерживает множество различных транспортов (также веб-сокетов), и это должно происходить, потому что веб-сокеты не поддерживаются большинством браузеров.Но, например, Google Chrome уже поддерживает веб-сокеты.Я считаю, что веб-сокеты - это транспорт будущего (но пока нет!).Если вы посмотрите на страницу поддержки браузера Socket.io , вы заметите, что Socket.io поддерживает все основные браузеры (некоторые даже древние).Приятно то, что это оборачивается вокруг хорошего API.

Каковы преимущества / недостатки каждого из них?

Вы сравниваете яблоки с апельсинами такСравнение это немного странно.


RabbitMQ

http://www.rabbitmq.com/tutorials/tutorial-one-python.html:

RabbitMQ - брокер сообщений.Основная идея довольно проста: она принимает и пересылает сообщения.Вы можете думать об этом как о почтовом отделении: когда вы отправляете почту в почтовый ящик, вы почти уверены, что мистер Почтман в конечном итоге доставит почту вашему получателю.Используя эту метафору, RabbitMQ - это почтовый ящик, почтовое отделение и почтальон.

Преимущества

  • Это довольно хорошая очередь сообщений .Лично я бы использовал redis или beanstalkd .

Недостатки:

  • Не совсем для "браузеров".

Socket.io

http://socket.io/:

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

Преимущества

  • Это для браузера

Недостатки

  • Это не очередь сообщений.

Может ли Socket.io заменить RabbitMQ?

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

5 голосов
/ 13 июля 2011

RabbitMQ - это действительно гибкий способ создания сетевых топологий. Он зрелый, поддерживаемый и поступает из финансовой сферы (в сфере финансов они долгое время занимались обменом сообщениями). Я использую RabbitMQ на стороне сервера и использую другие протоколы для подключения к RabbitMQ через «шлюз».

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

Кстати: Erlang используется Facebook и Twitter для своих закулисных вещей.

Теперь RabbitMQ - это больше, чем просто тип сетевых сокетов ... он основан на «гарантированной доставке». Эта особенность важна для корпоративных ситуаций. RabbitMQ, в качестве альтернативы, может использоваться для масштабирования ... на самом деле, есть нечто большее ... Я не считаю это справедливым.

Я не могу комментировать node.js, так как у меня еще не было возможности поиграть с ним. Я доволен RabbitMQ.

re: socket.io (мы говорим о веб-сокетах?) - если это для браузера (как показано в посте выше), вы могли бы потенциально соединить это с RabbitMQ. то есть RabbitMQ настолько гибок.

3 голосов
/ 09 июля 2011

RabbitMQ используется как способ передачи сообщений между приложениями, а не обязательно пользователями в браузере.Затем вы могли бы реализовать клиента RabbitMQ, например, в файле node.js, который отправляет полученные сообщения в браузер.

См. Пример http://www.rabbitmq.com/blog/2010/11/12/rabbitmq-nodejs-rabbitjs/.

...