2009-09-02 14 views
6

Próbuję użyć Twisted w rodzaju programu spidering, który zarządza wieloma połączeniami klientów. Chciałbym utrzymać pulę około 5 klientów pracujących jednocześnie. Funkcją każdego klienta jest połączenie się z określonym serwerem IRC, który pobiera z listy, wprowadzenie określonego kanału, a następnie zapisanie listy użytkowników w tym kanale do bazy danych.Zarządzanie wieloma połączeniami klientów Twisted

Problem, który mam, jest bardziej architektoniczny niż cokolwiek innego. Jestem całkiem nowy w Twisted i nie wiem, jakie opcje są dostępne do zarządzania wieloma klientami. Domyślam się, że najłatwiej jest po prostu wymazać każdą instancję ClientCreator po zakończeniu pracy i mieć centralną pętlę, która może sprawdzić, czy jest miejsce na dodanie nowego klienta. Myślę, że to nie jest szczególnie niezwykły problem, więc mam nadzieję, że zdobędę trochę informacji z doświadczeń innych ludzi.

Odpowiedz

4

Najlepsza opcja jest po prostu robić oczywiste rzeczy tutaj. Nie ma pętli lub powtarzającego się połączenia w czasie; po prostu mają opiekunów, którzy postępują właściwie.

Zachowaj centralny obiekt do zarządzania połączeniami i spraw, aby metody obsługi zdarzeń przekazywały mu informacje potrzebne do kontynuacji. Po uruchomieniu wykonaj 5 połączeń wychodzących. Śledzić, ile jest w toku, utrzymywać listę z nimi w nim. Gdy połączenie się powiedzie (w connectionMade) zaktualizuje listę, aby zapamiętać nowy stan połączenia. Po zakończeniu połączenia (w connectionLost) powiadom menedżera połączeń; jego odpowiedzią powinno być usunięcie tego połączenia i nawiązanie nowego połączenia w innym miejscu. Pośrodku powinno być dość oczywiste, jak wystrzelić żądanie dla nazw, których potrzebujesz i wrzucić je do bazy danych (czekając na włożenie bazy danych przed zakończeniem połączenia IRC, najprawdopodobniej czekając, aż Deferred przyjdzie z powrotem z adbapi).

3

Ponieważ każdy z klientów musi zaktualizować bazę danych, odruchowo myślę, że na barana wyłączyć connection pool - patrz here dłużej (cały dokument jest zalecany do niektórych ważnych wzorców projektowych, które często pojawiają przy użyciu skrętki).

-1

Nie wiem, czy jesteś zmuszony używać Twisted, w przeciwnym razie możesz spróbować dać Gevent.

Powiązane problemy