2010-06-24 30 views
1

Nous essayons de créer une application qui devrait utiliser Comet (AJAX Push) pour envoyer des notifications aux utilisateurs individuels. La plupart des notifications auront un délai d'attente assez faible. Comme nous utilisons RabbitMQ, il serait plus facile d'envoyer des messages via AMQP. Je me demande quelle est la meilleure façon d'adresser les utilisateurs individuels, de sorte que le serveur Comet et le serveur de file d'attente ont un travail facile.Comète pour la notification utilisateur sur une file d'attente de messages

J'ai examiné un certain nombre de solutions, y compris en utilisant Carrot avec Orbited, Tornado, et plus.

Si le serveur de comètes enregistre un consommateur (avec la file d'attente) pour chaque utilisateur, alors ces consommateurs doivent être conservés avec un délai d'attente ou jetés après chaque utilisation. Aucune des solutions ne semble très prometteuse. J'imagine quelque chose comme cela serait possible en Tornado/carotte:

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() 

Sinon, le serveur comète ne pourrait avoir un consommateur pour la file d'attente et doivent mettre en œuvre sa propre file d'attente de messages léger qui peut mettre en cache les notifications entrantes jusqu'à ce qu'un utilisateur les connecte et les utilise. Cela semble être quelque chose que memcached pourrait être bon, mais je n'ai aucune expérience avec cela.

Quelle serait la meilleure approche ici?

Répondre

0

J'ai eu presque le même cas d'utilisation et finalement fini avec Socket.IO pour le côté client, TornadIO pour la gestion des connexions et RabbitMQ pour le passage des messages (via pika). Fonctionne très bien, vaut la peine de l'essayer.