3

我期待使用 Websocket 为我的 Web 应用程序开发一个实时 API。为此,我使用 RabbitMQ 作为代理,我的后端基于 python (gevent + websocket),并将 Pika/Puka 作为 rabbitmq 客户端。

我在这里面临的问题是,我们如何使用 websocket 与 rabbitMQ 连接。在初始的 websocket 连接建立后,socket 对象等待来自客户端的新消息,而对于 rabbitMQ,我们需要为其设置一个消费者,因此它会在收到消息时进行处理。我们可以这样处理,

  1. 客户端通过全双工 websocket 与服务器建立连接。
  2. 在初始 websocket 握手之后,所有客户端都应该充当 RabbitMQ 的消费者,因此当客户端收到一些消息时,它们都会得到更新。
  3. 当新消息到达 websocket 时,该客户端会将其发送到 RabbitMQ,因此此时该客户端充当发布者。

问题是 Websocket 等待新消息,而 RabbitMQ 消费者在其通道上等待新消息,我无法将这两种情况联系起来。

我不确定这是否是错误的方法...

我找不到实现这种情况的方法。如果我走错了路或者有其他方法吗?请帮我解决这个问题。

谢谢,

哈里达斯·N。

4

2 回答 2

1

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

我认为这是已知的方法。这是我的这个网络聊天应用程序的 git repo。

https://github.com/haridas/RabbitChat

与 gevent/twisted 类似的事情似乎非常困难,因为 rabbitMQ 客户端无法支持 gevent/twisted 的事件循环。

鼠兔具有龙卷风适配器,因此易于设置。Pika 开发团队也在研究扭曲适配器。我希望他们很快就会发布它。

谢谢,

哈里达斯·N。

http://haridas.in

于 2011-07-27T06:17:09.113 回答
0

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

于 2011-08-23T19:39:40.330 回答