2011-04-05 76 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。這會自動爲您創建線程池併爲您節省大量時間。