私はJavaで簡単なWebクローラーを書いています。できるだけ多くのページを毎秒ダウンロードできるようにしたいと思います。Javaで非同期HTTPWeb要求を簡単に実行できるパッケージはありますか?HttpURLConnectionを使用しましたが、ブロックされています。ApacheのHTTPCoreNIOに何かがあることも知っていますが、もっと軽量なものを探しています。このパッケージを使用してみましたが、複数のスレッドでHttpURLConnectionを使用するとスループットが向上していました。
2 に答える
一般に、データ集約型プロトコルは、スレッド数が1000未満である限り、NIOよりも従来のブロッキングI / Oを使用した生のスループットの点でパフォーマンスが向上する傾向があります。少なくとも、(おそらく不完全で、おそらく偏っている)ApacheHttpClientによって使用されるHTTPベンチマーク[1]
スレッドの数が中程度(<250)である限り、スレッドでブロッキングHTTPクライアントを使用する方がはるかに良い場合があります。
NIOベースのHTTPクライアントが必要であると確信している場合は、現時点で最適な非同期HTTPクライアントと個人的に考えているJettyHTTPクライアントをお勧めします。
[1] http://wiki.apache.org/HttpComponents/HttpClient3vsHttpClient4vsHttpCore
このユーザーは同じ質問をしていませんでしたが、彼の質問に対する回答が役立つ場合があります:Java用の非同期HTTPクライアント
ちなみに、「1秒あたりのページ数をできるだけ多く」ダウンロードする場合は、クローラーが脆弱なサーバーを誤って停止する可能性があることに注意してください。自分の個人的なテスト設定以外で作成を解き放つ前に、おそらく「robots.txt」とこのファイルを解釈する適切な方法を読んでおく必要があります。