Мы пытаемся создать приложение, которое должно использовать Comet (AJAX Push) для отправки уведомлений отдельным пользователям.У большинства уведомлений будет довольно низкий тайм-аут.
Поскольку мы работаем с RabbitMQ, было бы проще отправлять сообщения через AMQP.Мне интересно, как лучше всего обращаться с отдельными пользователями, чтобы и сервер Comet, и сервер очередей выполняли простую работу.
Я рассмотрел ряд решений, в том числе использование Морковь с орбиты, торнадо и многое другое.
Если сервер комет регистрирует по одному потребителю (с очередью) для каждого пользователя, то эти потребители должны либо иметь таймаут, либо выбрасываться после каждого использования.Ни одно из решений не кажется очень многообещающим.Я полагаю, что подобное было бы возможно в 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()
В качестве альтернативы, у сервера комет может быть только один потребитель для очереди, и он должен реализовать собственную легкую очередь сообщений, которая может кэшировать входящие уведомления допользователь подключается и использует их.Это похоже на то, что memcached может быть полезен, но у меня нет опыта с этим.
Какой подход был бы лучшим здесь?