2013-01-18 1 views
1

J'ai deux processus Tornado X et Y. Un gestionnaire dans X traite des demandes de publication, et quand une telle demande arrive, en plus de faire des changements dans X, je veux aussi modifier certaines variables stockées dans Y.Utilisez redis pub/sub pour connecter les processus Tornado

Je voudrais utiliser le PUB/SUB de Redis pour ce faire. Il est évident que, dans le gestionnaire de X, j'ai besoin de publier un message sur le canal qui est souscrit par «Y».

Cet abonnement dans Y doit être long, de sorte que chaque fois qu'un message est publié sur le canal, quelque chose dans Y devrait automatiquement mettre à jour les variables en mémoire. Cependant, il n'est pas clair pour moi comment implémenter cet abonnement et la mise à jour résultante dans Y, car il ne peut pas être un gestionnaire normal. Je prévois le client redis asynchrone tornado-redis pour cela, si cela fait une différence.

Un exemple serait une aide précieuse!

Répondre

1

Ceci n'est pas une solution Redis PUB/SUB mais des alternatives. Si vous avez déjà Redis sur votre pile, vous pouvez aussi bien l'utiliser (ou mieux encore une file d'attente de messages).

  1. les plus simples est d'avoir un tornado.web.RequestHandler pour cela dans Y. Lorsque X doit faire le changement, ont X envoyer un HTTPRequest à Y. Payload peut être JSON, sous forme codée, binaire.

  2. Créez une socket dans Y, liez-la et ajoutez IOLoop.add_handler en écoutant sur cette socket avec un callback pour exécuter. Lorsque X doit effectuer le changement, faites-le se connecter à ce socket. (La charge utile peut être JSON, binaire). Cela nécessiterait un petit socket acceptant & en lisant si vous avez besoin d'envoyer un message.

Inutile de dire que les deux devraient être derrière des pare-feu.

Questions connexes