2011-11-25 23 views
2

任何人都可以幫我看一下URLConnection如何重用連接的示例代碼?java中的URLConnection如何重用池中的連接

URLConnection con = new URL("http://www.someurl.com").openConnection(); 

我正在使用上面的代碼來進行URLConnection。 URLConnection第一次將打開到指定URL的新連接。但在此之後,它將重新使用池中的現有連接。有沒有什麼證明這一點(我的意思是通過println())?

實際上有沒有辦法從池中檢索連接重用狀態?

+0

您可能能夠「連線嗅探」以確認它實際上是重新使用連接。或者檢查服務器上的連接(假設它使用http保持活動,這是它重新使用連接的唯一情況,我會想象...)另請參閱https://stackoverflow.com/q/3304006/32453 – rogerdpack

回答

4

java.net.URL的Javadoc:

返回表示由URL所引用的 遠程對象的連接的URLConnection對象。

一個新的連接是通過調用協議處理程序此URL的的openConnection 方法打開每次

如果URL的協議(如HTTP或JAR)存在屬於 以下的包之一或其子之一的 公共,專用URLConnection子:java.lang中,java.io, 的java .util,java.net,返回的連接將是該子類的。 例如,對於HTTP,將返回HttpURLConnection,並且對於 JAR,將返回JarURLConnection。

所以對於一個HTTP協議的URL會返回一個HttpURLConnection

java.net.HttpURLConnection的javadoc:

每個HttpURLConnection實例是用來做一個請求但 底層網絡連接HTTP服務器可能被其他實例透明共享

因此,下劃線的tcp連接可能會被集中

+0

好吧。同意。但是有可能證明這一點嗎?如果你提供一個示例代碼來證明tcp連接被集中和重用,這將是非常有用的。 –

+0

@Dilip B S不可能從代碼證明它,這是它被設計成隱藏在引擎蓋下的完全程度。你將不得不嗅探網絡。 – EJP

+0

嗯:)但它似乎只是概念。所以也許有辦法證明它......我們依賴於java文檔。如果要求證明它,那麼我們必須。 –