6

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

私が抱えている問題は、何よりも建築的なものです。私はTwistedにかなり慣れていないので、複数のクライアントを管理するためにどのオプションが利用できるかわかりません。最も簡単な方法は、各ClientCreatorインスタンスが作業を完了したら停止し、新しいクライアントを追加する余地があるかどうかを確認できる中央ループを作成することだと思います。これは特に珍しいことではないと思いますので、他の人の経験から情報を集めたいと思います。

4

3 に答える 3

4

最良の選択肢は、ここで明白なことをすることです。ループや繰り返しの時間指定の呼び出しはありません。正しいことをするハンドラーを持っているだけです。

中央の接続管理オブジェクトを維持し、イベント処理メソッドが継続するために必要な情報をそれにフィードするようにします。起動したら、5つの発信接続を行います。進行中の数を追跡し、それらを含むリストを維持します。接続が成功したら(でconnectionMade)、リストを更新して接続の新しい状態を記憶します。接続が完了したら(でconnectionLost)、接続マネージャーに通知します。その応答は、その接続を削除し、別の場所で新しい接続を確立することです。途中で、必要な名前のリクエストを実行してデータベースに詰め込む方法はかなり明白です(データベースの挿入が完了するのを待ってから、IRC接続をドロップする可能性があります。おそらく、Deferredが戻ってくるのを待ちます。からadbapi)。

于 2009-09-11T00:52:04.960 に答える
3

各クライアントはデータベースを更新する必要があるので、本能的に私は便乗すると思いますconnection pool-詳細については、ここを参照してください(ツイストを使用するときに頻繁に現れるいくつかの重要なデザインパターンについては、ドキュメント全体をお勧めします)。

于 2009-09-02T03:49:39.603 に答える
-1

Twistedを使用する必要があるかどうかはわかりません。そうでない場合は、Geventを試してみてください。

于 2011-03-22T23:34:54.103 に答える