2011-01-24 17 views
0

私は10000000以上のWebサイトのhttp応答コードを取得したいと思います。だから、私はHttp(s)?URLConnectionクラスをJavaで使用しました。getResponseCodeよりもJavaでhttp応答コードをより迅速に取得するにはどうすればよいですか?

コードは

HttpURLConnection http = (HttpURLConnection)address.openConnection(); 
http.setReadTimeout(300000); 
return http.getResponseCode(); 

あるしかし、私はそれが非常に遅いと思います。私は合計時間を計算すると、それは10日以上です。

JavaでHTTP応答コードを取得するために、より高速な機能やその他の方法をご存知ですか?

+0

なぜこれを行う必要がありますか? –

+0

実際には、10Mの応答コードを取得するには、10Mの要求を送信する必要があります。返信するには非常に時間がかかります。私はそれが少なくとも10日間は驚くことではない。私はそれがそれよりはるかに長いと思うだろう。 –

+0

@Anon:彼はウェブクローラーを書いているのかもしれない。 –

答えて

3
  1. 複数のスレッドを使用します。 1000スレッドのプールは、経過時間を1000分の1に減少させます。

  2. ノンブロッキングI/Oを使用してください。 1000同時接続を実行すると合計時間は1000分の1になります。

+0

なぜ1000スレッドのプールが経過時間を100倍だけ落とすのですか? –

+1

また、Webクローラで読むことをお勧めします。完全なパフォーマンスの他にも、他にも多くの考慮事項があります。たとえば、Webサイトにリクエストを氾濫させると、IPアドレスがブロックされる可能性があります。そのため、クローラは同じホストにあまりにも多くのリクエストを発行しないようにスマートを組み込む必要があります。それを超えて、問題を小規模なバッチに分割し、これらのバッチを複数のスレッドで並行して実行することは、この回答が示唆し、最終的には多くのマシン上で行われます。 –

+1

そして、GETリクエストの代わりにHEADリクエストを発行します。 HTTP応答本体を消費する必要があります。そうしないと、HTTP接続をすぐに再利用することはできません。 HEAD要求には本文が含まれていません。合計時間がさらに減少します。 – BalusC

関連する問題