我们尝试构建应该使用Comet(AJAX Push)向个人用户发送通知的应用程序。大多数通知的超时时间都相当短。
当我们运行RabbitMQ时,最简单的方法是通过AMQP发送消息。我想知道解决个人用户的最佳方式是什么,以便Comet服务器和队列服务器都能轻松完成。
我已经研究了许多解决方案,包括使用 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()
或者,彗星服务器只能有一个队列消费者,并且必须实现自己的轻量级消息队列,该队列可以缓存传入通知,直到用户连接并使用它们。这似乎是memcached可能有用的东西,但我没有经验。
这里最好的方法是什么?