Асинхронные веб-запросы в Java? - PullRequest
3 голосов
/ 08 декабря 2010

Я пишу простой веб-сканер на Java.Я хочу, чтобы он мог загружать как можно больше страниц в секунду.Существует ли какой-нибудь пакет, облегчающий выполнение асинхронных HTTP-запросов в Java?Я использовал HttpURLConnection, но это блокировка.Я также знаю, что в Apache HTTPCore NIO есть что-то, но я ищу что-то более легкое.Я попытался использовать этот пакет, и я получал лучшую пропускную способность, используя HttpURLConnection для нескольких потоков.

Ответы [ 2 ]

6 голосов
/ 08 декабря 2010

Как правило, протоколы с интенсивным использованием данных имеют тенденцию работать лучше с точки зрения необработанной пропускной способности с классическим блокирующим вводом / выводом по сравнению с NIO, если число потоков меньше 1000. По крайней мере, это, безусловно, имеет место с HTTP на стороне клиента основанный на (вероятно, несовершенном и, возможно, предвзятом) тесте HTTP, используемом Apache HttpClient [1]

Один может быть намного лучше использовать блокирующий HTTP-клиент с потоками, если число потоков умеренное (<250) </p>

Если вы абсолютно уверены, что вам нужен HTTP-клиент на базе NIO, я могу порекомендовать Jetty HTTP-клиент, который я лично считаю лучшим асинхронным HTTP-клиентом на данный момент.

[1] http://wiki.apache.org/HttpComponents/HttpClient3vsHttpClient4vsHttpCore

3 голосов
/ 08 декабря 2010

Хотя этот пользователь не задавал тот же вопрос, вы можете найти полезные ответы на его вопрос: Асинхронный HTTP-клиент для Java

Как примечание, если вызагружая «столько страниц в секунду, сколько возможно», вы должны иметь в виду, что сканеры могут непреднамеренно остановить работу слабого сервера.Вам, вероятно, следует прочитать «robots.txt» и соответствующий способ интерпретации этого файла, прежде чем использовать свое творение для чего-либо, выходящего за пределы вашей личной настройки теста.

...