2011-03-03 4 views
0

Je faisais du câblage dans certains Twisted et j'ai rencontré un problème. Je mettre en œuvre un serveur couple qui peuvent être connectés à l'aide telnet localhost xInteraction des serveurs avec Twisted?

il gère mon code comme ceci:

reactor.listenTCP(12001, server1, ....)

reactor.listenTCP(12002, server2, ....) etc.

Ceux-ci utilisent alors mon usine pour construire une protocole

Je me demande comment je peux faire interagir ces serveurs les uns avec les autres. Par exemple, supposons qu'un client envoie une requête pour mettre à jour une valeur commune à chaque serveur et que je souhaite transmettre cette valeur aux autres serveurs pour mettre à jour leur valeur actuelle. J'ai regardé dans reactor.connectTCP mais cela ne semble pas faire ce que je veux. Est-il possible de se connecter à mes serveurs sans utiliser la commande telnet?

Répondre

0

Bien sûr. Utilisez des techniques Python normales pour cela. Prenons votre exemple d'une valeur mise à jour. Je vais faire un simple compteur qui pourrait être incrémenté par des connexions à un serveur et la valeur envoyée aux connexions à l'autre serveur:

from twisted.internet import reactor 
from twisted.internet.protocol import ServerFactory, Protocol 

class Counter(object): 
    def __init__(self): 
     self._value = 0 

    def increment(self): 
     self._value += 1 

    def get(self): 
     return self._value 


class Incrementor(Protocol): 
    def connectionMade(self): 
     self.factory.value.increment() 
     self.transport.loseConnection() 


class Reporter(Protocol): 
    def connectionMade(self): 
     self.transport.write("Value is %d\n" % (self.factory.value.get(),)) 
     self.transport.loseConnection() 

server1 = ServerFactory() 
server1.protocol = Incrementor 

server2 = ServerFactory() 
server2.protocol = Reporter 

server1.value = server2.value = Value() 

reactor.listenTCP(12001, server1) 
reactor.listenTCP(12002, server2) 
reactor.run() 

Les deux usines partagent maintenant un morceau de l'état mutable. Les protocoles peuvent accéder à leurs usines car la valeur par défaut ServerFactory se définit comme un attribut sur les protocoles qu'il instancie, de sorte que les protocoles peuvent également atteindre l'état mutable partagé sur les usines. L'un incrémente le compteur, l'autre récupère la valeur.

Vous pouvez construire de nombreux scénarios de ce type avec des appels d'état et de méthode partagés sur des objets non-protocol, non-factory.