2009-01-20 6 views
1

J'ai un processus "gestionnaire" sur un noeud, et plusieurs processus de travail. Le gestionnaire est le serveur réel qui détient toutes les connexions aux clients. Le gestionnaire accepte tous les paquets entrants et les place dans une file d'attente, puis les processus de travail retirent les paquets de la file d'attente, les traitent et génèrent un résultat. Ils envoient le résultat au gestionnaire (en les mettant dans une autre file d'attente qui est lue par le gestionnaire), mais voici où je suis bloqué: comment envoyer le résultat à une socket spécifique? Il est facile de traiter le traitement des paquets sur un seul processus, car lorsque vous recevez un paquet, vous pouvez y répondre simplement en saisissant l'objet "transport" dans le contexte. Mais comment ferais-je cela avec la méthode que j'utilise?Python/Twisted - Envoi à un objet socket spécifique?

Répondre

3

Il semble que vous ayez besoin de garder une référence au transport (ou au protocole) avec les octets qui viennent d'arriver sur ce protocole dans votre objet 'event'. De cette façon, les réponses qui sont arrivées sur une connexion sortent sur la même connexion.

Si les choses n'ont pas besoin d'être traitées en série, vous devriez peut-être penser à configurer des foncteurs capables de gérer les données en parallèle pour éliminer la nécessité de faire la queue. Gardez juste à l'esprit que vous devrez protéger les sections critiques de votre code. À en juger par votre autre question sur l'évaluation de la conception de votre serveur, il semblerait que le traitement en parallèle ne soit pas possible pour votre situation. Ma première suggestion est donc la suivante.

Questions connexes