HttpURLConnection的警告
這段代碼對您來說還不錯嗎?
看起來不錯–它打開一個連接,從中讀取,關閉輸入流,釋放連接,僅此而已。 但是,在運行一些性能測試并試圖找出瓶頸問題時,我們發現disconnect()看起來并不那么好–當我們停止斷開連接時,傳出連接的數量是原來的兩倍。 這是javadoc:
表示在不久的將來不太可能向服務器發出其他請求。 調用disconnect()并不意味著可以將此HttpURLConnection實例重新用于其他請求。
在類itslef上:
如果持久連接當時處于空閑狀態,則調用disconnect()方法可能會關閉基礎套接字。
這仍然不清楚,但是給我們一個暗示,還有更多的東西。 讀取幾個計算器的和java.net答案(后1 , 2 , 3 , 4 ),并且還對Android文檔相同的類,它是從Oracle實現實際上不同的,事實證明, .disconnect()實際關閉(或在Android的情況下可能會關閉)基礎套接字。
然后,我們可以找到這部分文檔 (它在javadoc中進行了鏈接,但是在調用斷開連接時并沒有立即變得很重要),這為我們提供了全貌:
keep.alive屬性(默認值:true)指示套接字可以被后續請求重用。 通過打開與服務器的連接(支持保持活動狀態)來工作,然后不再需要打開套接字的開銷。 默認情況下,最多重復使用5個此類套接字(每個目標)。 您可以通過設置http.maxConnections屬性來增加此池的大小。 但是,將其增加到10、20和50之后,傳出請求的數量沒有明顯改善。
但是,當我們使用池化連接管理器從HttpURLConnection切換到apache http client時 ,每秒發出的連接數量增加了3倍。 而這并沒有對其進行微調。
負載測試,即用盡可能多的請求轟炸目標服務器,聽起來像一個小眾的用例。 但是實際上,如果您的應用程序在每個請求中調用了堆棧中的Web服務或外部服務,那么您將遇到相同的問題–您每秒可以向目標服務器發出更少的請求,因此,每秒響應您的用戶的請求更少。
這里的建議是:幾乎總是喜歡apache http客戶端 –它具有更好的API方式和更好的性能,而無需了解其在下面的功能。 但也要注意同樣的注意事項–檢查池大小和連接重用 。 如果使用HttpURLConnection ,請在閱讀連接響應后不要斷開連接,請考慮增加套接字池的大小,并注意相關問題 。
翻譯自: https://www.javacodegeeks.com/2014/09/caveats-of-httpurlconnection.html
總結
以上是生活随笔為你收集整理的HttpURLConnection的警告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在JBoss Fuse / Fabric
- 下一篇: 简而言之,JUnit:单元测试断言