2009-06-05 6 views
2

私はC#でマルチスレッドクローラーを実装しました。 カスタムスレッドプールを使用すると、ジョブキューがあります。ダウンロードされるすべてのページがキューに入れられ、各スレッドは1つを取り込んでダウンロードします。C#MultiThreaded HttpWebRequestタイムアウト..ヘルプ!

15スレッドを使用 1つのサイトのみをクロールすると、シルクとして滑らかで高速に処理されます。 複数のサイトを同時にクロールする場合異なるサーバーに同時にというタイムアウトが発生します。

これはDNS解決と何か関係がありますか? これは何が起こると思いますか?

ありがとうございました。 Roey

+0

したがって、それぞれ異なるサーバーにアクセスする15のスレッドを実行している場合、それらのすべてからタイムアウトが発生しますか? – Sesh

+0

それは一貫していません。いくつかのサーバーは私にタイムアウトの負荷を与えますが、いくつかはそうではありません。 各サーバーで独立して実行しますが(同じスレッド数で)、タイムアウトはほとんど発生しません。 – Roey

答えて

1

hereのようにHttpWebRequestの接続制限があります。 MSDNのHttpWebRequest.ServicePoint.ConnectionLimitを参照してください。

+0

私はこれを100000に設定しました。 – Roey

+0

Roey、あなたはそれを解決しますか?私も同様の問題があります。 – fravelgue

2

おそらく、あなたはWindowsでこれを実行しています。 HttpWebRequestで許可される接続数を設定している可能性がありますが、これはWindowsの制限を変更しません。たとえば、XP SP2では、マイクロソフトでは1秒あたり10接続制限を課していることがわかりました。開いているのを待っている接続の大きなバックログがある場合、時間通りに許可を与えられていないため、タイムアウトになっている可能性があります。

確かに、問題に遭遇したことはないので、私はこの問題について多くの洞察を得ていません。作成しようとしている接続の数を絞り戻して、タイムアウトを減らすかどうかを確認してください。

+1

私は、接続の制限はサーバーごとにあると思う - 1つのサーバーへの10以上のライブ接続。彼のクローラは1台以上のサーバと通信しています。 – Sesh

関連する問題