带Websocket和Gevent的RabbitMQ

带Websocket和Gevent的RabbitMQ,websocket,rabbitmq,gevent,Websocket,Rabbitmq,Gevent,我期待着使用Websocket为我的web应用程序开发一个实时API。为此,我使用RabbitMQ作为代理,我的后端基于python(gevent+websocket),Pika/Puka作为RabbitMQ客户机 我在这里面临的问题是,如何使用websocket连接rabbitMQ。在初始websocket连接建立之后,socket对象等待来自客户端的新消息,对于rabbitMQ,我们需要为它设置一个使用者,以便它在收到消息时处理该消息。我们可以这样理解 客户端通过全双工websocket与服

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

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

  • 客户端通过全双工websocket与服务器建立连接
  • 在初始websocket握手之后,所有客户机都应该充当RabbitMQ的消费者,因此当客户机收到一些消息时,它们都会得到更新
  • 当新消息到达websocket时,该客户机将把它发送到RabbitMQ,所以此时该客户机充当发布者
  • 问题是Websocket等待新消息,RabbitMQ使用者在其通道上等待新消息,我无法链接这两种情况

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

    我找不到实现此方案的方法。如果我走错了方向,或者有其他方法吗?请帮助我解决此问题

    谢谢,


    Haridas N.

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

    我想这已经是众所周知的方法了。这是我的git repo,用于此web聊天应用程序

    使用gevent/twisted进行类似操作似乎非常困难,因为rabbitMQ客户端无法支持gevent/twisted的事件循环

    pika具有tornado适配器,因此易于安装。Pika开发团队也在开发twisted适配器。我希望他们能尽快发布

    谢谢

    哈里达斯


    .

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

    是的,这是可能的,并且有很多示例可用。但就我而言,我需要RabbitMQ集成。无论如何,我发现了ZeroMQ和Gevent的一些良好集成。因此,我将查看它。您是否正在为每个用户创建新的rabbitmq连接?