RabbitMQ с Websocket и Gevent - PullRequest
       23

RabbitMQ с Websocket и Gevent

2 голосов
/ 21 июля 2011

Я с нетерпением жду разработки API-интерфейса реального времени для моего веб-приложения с использованием Websocket. Для этого я использую RabbitMQ в качестве брокера, а My backend основан на python (gevent + websocket) и Pika / Puka в качестве клиента rabbitmq.

Проблема, с которой я здесь сталкиваюсь, заключается в том, как мы можем использовать websocket для соединения с rabbitMQ. После первоначального установления соединения через веб-сокет объект сокета ожидает новых сообщений от клиента, а в случае rabbitMQ нам нужно настроить для него получателя, чтобы он обрабатывал сообщение при получении. Мы можем принять это таким образом,

  1. Клиентам устанавливается соединение с сервером через полнодуплексный веб-сокет.
  2. Все клиенты должны действовать как потребитель RabbitMQ после первоначального рукопожатия websocket, поэтому они все получают обновления, когда клиент получает какое-либо сообщение.
  3. Когда новое сообщение поступает в websocket, этот клиент отправляет его в RabbitMQ, поэтому в настоящее время этот клиент выступает в роли издателя.

Проблема в том, что Websocket ожидает нового сообщения, а потребитель RabbitMQ ожидает нового сообщения на своем канале. Мне не удалось связать эти два случая.

Я не уверен, что это неправильный метод ...

Я не могу найти метод для реализации этого сценария. Если я иду не в ту сторону или есть какой-то альтернативный метод? Пожалуйста, помогите мне исправить это.

Спасибо,

Харидас Н.

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Я реализовал аналогичное требование с Tornado + websocket + RabbitMQ + Pika.

Я думаю, что это уже известный метод.Вот мое git-репо для этого приложения для веб-чата.

https://github.com/haridas/RabbitChat

Подобные вещи с gevent / twisted кажутся очень сложными, потому что клиенты rabbitMQ не могут поддерживать циклы событийGevent / Twisted.

Пика имеет адаптер торнадо, что позволяет легко настроить.Команда разработчиков Pika работает и над витым адаптером.Я надеюсь, что они выпустят это очень скоро.

Спасибо,

Харидас Н.

http://haridas.in.

0 голосов
/ 23 августа 2011

Простым решением было бы использование экземпляров gevent.queue.Queue для связи между гринлетами.

...