【问题标题】:Comet for User based Notification over a Message QueueComet 用于消息队列上基于用户的通知
【发布时间】:2011-03-07 22:32:33
【问题描述】:

我们尝试构建应该使用 Comet (AJAX Push) 向个人用户发送通知的应用程序。大多数通知的超时时间都很短。

当我们运行 RabbitMQ 时,通过 AMQP 发送消息是最简单的。我想知道解决单个用户的最佳方式是什么,以便 Comet 服务器和队列服务器都能轻松工作。

我查看了许多解决方案,包括使用 Carrot 与 Orbited、Tornado 等。

如果彗星服务器为每个用户注册一个消费者(使用队列),那么这些消费者要么必须保持超时,要么在每次使用后被丢弃。这两种解决方案似乎都不是很有希望。我想在 Tornado/Carrot 中可能会有这样的事情:

class MainHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):
        user_id = 123

        consumer = Consumer(connection=conn, queue="feed", exchange="feed", routing_key=user_id)
        consumer.register_callback(self.message_received)
        consumer.wait()

    def message_received(self, message_data, message):
        self.write(simplejson.dumps(message_data))
        message.ack()
        consumer.close()

        self.finish()

或者,comet 服务器只能有一个队列消费者,并且必须实现自己的轻量级消息队列,该队列可以缓存传入的通知,直到用户连接并使用它们。这似乎是 memcached 可能有用的东西,但我没有这方面的经验。

这里最好的方法是什么?

【问题讨论】:

    标签: python comet amqp tornado orbited


    【解决方案1】:

    我有几乎相同的用例,最终以 Socket.IO 用于客户端,TornadIO 用于处理连接和 RabbitMQ 用于消息传递(通过pika)。效果不错,值得一试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-12
      • 2017-04-14
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 2019-03-01
      • 2012-01-21
      • 2019-11-04
      相关资源
      最近更新 更多