2009-09-02 16 views
6

私は、複数のクライアント接続を管理する一種のスパイダリングプログラムでTwistedを使用しようとしています。一度に働く約5人のクライアントのプールを維持したいと思います。各クライアントの機能は、リストから取得した特定のIRCサーバーに接続し、特定のチャネルを入力し、そのチャネルのユーザーのリストをデータベースに保存することです。複数のツイストクライアント接続の管理

私が持っている問題は、何よりも建築的です。私はTwistedにはかなり新しく、複数のクライアントを管理するためにどのようなオプションが利用できるのかわかりません。一番簡単なのは、各ClientCreatorインスタンスが作業を完了し、新しいクライアントを追加する余地があるかどうかを確認できるセントラルループを持っていることです。私はこれが特に珍しい問題ではないと思いますので、私は他の人々の経験からいくつかの情報を集めることを望んでいます。 (全体のドキュメントは、ツイストを使用した場合、多くの場合、出てくるいくつかの重要なデザインパターンのために推奨されます)以上のためのhereを参照してください - あなたのクライアントの各以来

答えて

4

最良の選択肢は、ここで明らかなことを行うことです。ループを持たないでください。正しいことをするハンドラを持っているだけです。

中心的な接続管理オブジェクトを保持し、イベント処理メソッドで、継続する必要のある情報を提供します。起動すると、5つの発信接続を確立します。進行中の数を把握し、リストを維持します。接続が成功すると(connectionMade)、接続の新しい状態を記憶するためにリストが更新されます。接続が完了すると(connectionLost)、接続マネージャに通知します。その応答は、その接続を削除し、別の場所に新しい接続を確立することです。中には、必要な名前のリクエストを発してデータベースに埋め込む方法(IRC接続を削除する前にデータベースの挿入が完了するのを待っている、おそらくDeferredが来るのを待つことによって) adbapiから戻る)。

3

は本能的に、私はconnection poolをオフに便乗したいと思いますが、データベースを更新する必要があります。

-1

Twistedを使用することを余儀なくされているかどうかわからない場合は、Geventを試してみてください。