2010-04-20 4 views
1

Salutations, Forum.Plusieurs usines et protocoles simultanés en mode torsadé: même service, différents ports

Je travaille sur un programme en Python qui utilise Twisted pour gérer le réseau. La base de ce programme est un service TCP qui doit écouter les connexions sur plusieurs ports. Cependant, au lieu d'utiliser une usine Twisted pour gérer un objet de protocole pour chaque port, j'essaie d'utiliser une fabrique séparée pour chaque port. La raison en est de forcer une séparation entre les groupes de clients se connectant aux différents ports. Malheureusement, il semble que cette architecture ne fonctionne pas: les clients qui se connectent à un port semblent être disponibles dans toutes les usines (par exemple, la classe de protocole utilisée par chaque usine comprend un fichier self.factory.clients. append (self) 'statement ... au lieu d'ajouter un client donné à l'usine pour un port particulier, le client est ajouté à toutes les usines), et chaque fois que j'arrête le service sur un port, les écouteurs sur tous les ports s'arrêtent.

Je travaille avec Twisted depuis un petit moment et j'ai peur de ne pas comprendre comment ses classes d'usine sont gérées. Ma question est la suivante: est-il tout simplement impossible d'avoir plusieurs instances simultanées de la même fabrique et du même protocole en usage sur différents ports (sans que ces instances ne marchent sur les orteils de l'autre)?

Répondre

6

Vous pouvez certainement faire ce que vous voulez - il est difficile de dire ce que vous faites mal sans voir votre code, mais je vous parie avez clients = [] dans votre classe d'usine au lieu de

self.clients = [] 

dans la méthode __init__ de votre classe d'usine.

+0

Wow - Je ne voudrais pas parier contre toi, jamais! Comme c'est ridicule de ne pas attraper ça. L'ensemble du problème a disparu dès que j'ai déplacé l'initialisation de la liste des 'clients' dans la méthode __init__ de mon usine. Merci beaucoup pour votre réponse rapide !! – RichardCroasher

+1

et de ne pas mentionner 'vous avez probablement besoin de le faire dans votre '__init__' 'Maintenant, c'est la classe - sans jeu de mots. –

Questions connexes