2010-07-06 4 views
7

Ich versuche, Twisted zu verwenden, um einen Cluster von Computern zu erstellen, die ein Programm auf einem Teil eines größeren Datasets ausführen.twisted: ein Client, viele Server

Meine "Server" erhalten einen Datenblock vom Client und führen den Befehl x darauf aus.

Mein "Client" stellt eine Verbindung zu mehreren Servern her, die ihnen jeweils einen Datenblock geben und ihnen mitteilt, mit welchen Parametern der Befehl x ausgeführt werden soll.

Meine Frage ist: Gibt es einen Weg, um die Reaktorschleife einzurichten, um viele Server zu verbinden:

reactor.connectTCP('localhost', PORT, BlastFactory()) 
reactor.run() 

oder habe ich Client und Server in meinem Paradigma tauschen?

+0

Studie xmlrpclib:

Oder am einfachsten, können Sie einfach mehrere Verbindungsversuche vor reactor.run() Kicks aus der ganzen Show, wie diese aufgebaut. – mcandre

+0

"Verbinden mit [was auch immer] Clients" ist nicht, wie TCP-IP funktioniert - der/die Client (s) stellen die Verbindung her, der/die Server verbinden sich _zu_ (Sie können auch "Peers" haben, die sowohl Server als auch Clients sind) obwohl einige populäre Protokolle außer den Peer-to-Peer-das tun). –

+0

@Alex Martelli: Das ist ein Typ-o. Zu diesem Zeitpunkt verwechsle ich immer noch Clients und Server. –

Antwort

8

Ruf einfach connectTCP mehrmals an.

Der Trick ist natürlich, dass reactor.run() Blöcke „für immer“ (die gesamte Laufzeit des Programms), so dass Sie nicht dass mehrmals anrufen mögen.

Sie haben mehrere Möglichkeiten; Sie können einen zeitgesteuerten Anruf einrichten, um zukünftige Verbindungen herzustellen, oder Sie können neue Verbindungen von Ereignissen auf Ihrer Verbindung starten (wie connectionLost oder clientConnectionFailed).

for host in hosts: 
    reactor.connectTCP(host, PORT, BlastFactory()) 
reactor.run() 
+0

Ich wusste nicht, dass ich das tun könnte, wee! –