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