2009-09-02 4 views
6

Ich versuche Twisted in einer Art Spidering-Programm zu verwenden, das mehrere Clientverbindungen verwaltet. Ich möchte von einem Pool von ungefähr 5 Klienten halten, die gleichzeitig arbeiten. Die Funktionalität jedes Clients besteht darin, eine Verbindung zu einem bestimmten IRC-Server herzustellen, den er aus einer Liste bezieht, einen bestimmten Kanal einzugeben und dann die Liste der Benutzer in diesem Kanal in einer Datenbank zu speichern.Mehrere verdrehte Clientverbindungen verwalten

Das Problem, das ich habe, ist architektonischer als alles andere. Ich bin ziemlich neu in Twisted und ich weiß nicht, welche Optionen für die Verwaltung mehrerer Clients zur Verfügung stehen. Ich gehe davon aus, dass der einfachste Weg darin besteht, dass jede ClientCreator-Instanz nach Abschluss ihrer Arbeit einfach abstirbt und eine zentrale Schleife hat, die prüfen kann, ob Platz für das Hinzufügen eines neuen Clients ist. Ich denke, das ist kein besonders ungewöhnliches Problem, daher hoffe ich, einige Informationen aus den Erfahrungen anderer zu erhalten.

Antwort

4

Die beste Option ist wirklich nur das Offensichtliche hier zu tun. Keine Schleife oder ein wiederholter zeitgesteuerter Anruf habe nur Handler, die das Richtige tun.

Behalten Sie ein zentrales Verbindungsverwaltungsobjekt bei und sorgen Sie dafür, dass Ereignisbehandlungsmethoden die Informationen liefern, die es benötigt, um weiterzumachen. Wenn es startet, mache 5 ausgehende Verbindungen. Verfolgen Sie, wie viele in Arbeit sind, pflegen Sie eine Liste mit ihnen darin. Wenn eine Verbindung erfolgreich ist (in connectionMade) aktualisieren Sie die Liste, um den neuen Status der Verbindung zu speichern. Wenn eine Verbindung hergestellt wurde (in connectionLost), informieren Sie den Verbindungsmanager. Die Antwort sollte sein, diese Verbindung zu entfernen und irgendwo anders eine neue Verbindung herzustellen. In der Mitte sollte es ziemlich offensichtlich sein, wie man eine Anfrage nach den benötigten Namen abfeuert und sie in eine Datenbank stopft (wartet darauf, dass die Datenbank eingefügt wird, bevor sie ihre IRC-Verbindung fallen lässt, wahrscheinlich, indem sie auf die Deferred wartet zurück von adbapi).

3

Da jeder Ihrer Kunden benötigt eine Datenbank zu aktualisieren, instinktiv glaube ich das connection pool Huckepack off würde - here für mehr sehen (das ganze Dokument ist für einige wichtige Design-Muster empfohlen, die oft entstehen, wenn verdrehten verwenden).

-1

Ich weiß nicht, ob Sie gezwungen sind, Twisted zu verwenden, sonst möchten Sie vielleicht Gevent einen Versuch geben.