Несколько TCP-соединений с Java URLConnection - PullRequest
0 голосов
/ 05 апреля 2011

Я сделал простой HTTP-клиент, который загружает набор URL-адресов, проанализированных с веб-страницы.

Моя проблема в том, что загрузка медленная, по сравнению с реальным браузером (IE, Firefox, Chrome).Особенно, если на странице много объектов.

Я заметил (с помощью wireshark), что настоящие браузеры часто устанавливают 5-10 TCP-соединений в течение одной миллисекунды сразу после запуска загрузки страницы.Затем эти соединения будут жить одновременно в течение некоторого периода времени.

Мой клиент также будет устанавливать параллельные TCP-соединения (и будет повторно использовать TCP-соединения), но не на этом агрессивно.Я предполагаю, что это одна из причин, по которой мой клиент работает медленнее.

Я пытался создать несколько соединений URLC перед чтением из входного потока, но это не работает для меня.Я неопытный, поэтому, вероятно, я делаю это неправильно.

Кто-нибудь знает способ сделать это (имитировать, что браузеры делают с точки зрения настройки соединения TCP) с URLConnection?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Я бы также порекомендовал использовать высокопроизводительную сетевую библиотеку, такую ​​как Apache Mina .Это автоматически создаст для вас пул потоков и сэкономит вам много времени.

0 голосов
/ 05 апреля 2011

Я рекомендую использовать HttpClient:

http://hc.apache.org/httpcomponents-client-ga/

Имеется поддержка управления внутренними соединениями, пулами и т. Д. Браузеры, как правило, имеют подобные вещи.

Возможно, все изменилось с тех пор, как я в последний раз пользовался им, но UrlConnection плохо работал для производственных приложений. Ex. у него не было чистого способа его выключить.

...