2011-04-05 46 views
0

我做了一个简单的HTTP客户端,它下载从网页解析的一组URL。与java的几个TCP连接URLConnection

我的问题是下载速度慢,与真正的浏览器(IE,Firefox,Chrome)相比。特别是如果页面包含许多对象。

我注意到(使用wireshark)很多时候真正的浏览器会在开始加载页面后立即在同一毫秒内建立5-10个TCP连接。然后这些连接将同时存在一段时间。我的客户端也将建立并发的TCP连接(并且它将重新使用TCP连接),但是没有这么积极。我猜这是我的客户较慢的原因之一。

我已经尝试在从输入流中读取之前创建几个URLConnections,但这不适用于我。虽然我没有经验,所以我可能做错了。

有没有人知道如何做到这一点(模仿浏览器在TCP连接设置方面做了什么)与URLConnection?

+0

您是否为每个要下载数据的URLConnection创建单独的线程? – MeBigFatGuy 2011-04-05 17:44:39

+0

感谢您的回应!不,我刚刚创建了单独的URLConnection对象。我想我应该在单独的线程中运行它们。嗯,我可以做到这一点,仍然只有一个输入流侦听器? – plithner 2011-04-05 18:30:14

回答

0

我推荐使用的HttpClient:

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

它有一个内部的连接管理支持,汇集等 浏览器往往有这种东西。

自从我上次使用它以来,事情可能已发生变化,但UrlConnection在生产应用程序中效果不佳。防爆。它没有一个干净的方法来关闭它。

+0

我认为你是对的。我开始使用URLConnection(和HTTPUrlConnection)并且很难打破免费:-) – plithner 2011-04-05 18:33:27

0

我也推荐使用高性能网络库,如Apache Mina。这会自动为您创建线程池并为您节省大量时间。