RabbitMQ与Websocket和Gevent结合使用

3
我希望使用Websocket为我的Web应用程序开发一个实时API。为此,我使用RabbitMQ作为代理,并且我的后端基于Python(gevent + websocket),使用Pika / Puka作为RabbitMQ客户端。
我面临的问题是如何使用Websocket连接到RabbitMQ。在初始Websocket连接建立之后,套接字对象等待来自客户端的新消息,在RabbitMQ的情况下,我们需要为其设置一个消费者,以便在接收到消息时处理该消息。我们可以这样考虑:
1. 客户端通过全双工websocket与服务器建立连接。 2. 所有客户端在初始websocket握手后都应充当RabbitMQ的消费者,因此它们都会在客户端获得一些消息时获得更新。 3. 当新消息到达websocket时,该客户端将其发送到RabbitMQ,因此此时该客户端充当发布者。
问题在于Websocket等待新消息,而RabbitMQ消费者在其通道上等待新消息,我未能将这两种情况链接起来。
我不确定这是否是错误的方法...
我找不到一种方法来实现这种情况。如果我走错了路或有任何替代方法,请帮助我解决。
谢谢,
Haridas N.
2个回答

1

我使用Tornado + websocket + RabbitMQ + Pika实现了类似的需求。

我认为这已经是一个已知的方法。这是我的git仓库,包含了这个Web聊天应用程序。

https://github.com/haridas/RabbitChat

因为RabbitMQ客户端无法支持gevent/twisted的事件循环,所以似乎很难做类似于gevent/twisted的事情。

Pika有Tornado适配器,这使得设置变得容易。Pika开发团队也在努力开发Twisted适配器,希望他们很快就能发布。

谢谢,

Haridas N.

http://haridas.in


你是为每个用户创建新的RabbitMQ连接吗? - Mike

0
一个简单的解决方案是使用 gevent.queue.Queue 实例进行协程间通信。

是的,这是可能的,而且有很多例子可供参考。但在我的情况下,我需要RabbitMQ集成。无论如何,我找到了一些很好的ZeroMQ和Gevent集成的例子。所以我会研究一下它。 - Haridas N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接