【问题标题】:How does URLConnection in java reuses the connection from the pooljava中的URLConnection如何重用池中的连接
【发布时间】:2011-11-25 08:38:54
【问题描述】:

谁能帮助我提供有关 URLConnection 如何重用连接的示例代码?

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

我正在使用上面的代码来创建一个 URLConnection。第一次,URLConnection 将打开一个到指定 URL 的新连接。但之后它将重用池中的现有连接。有什么可以证明这一点(我的意思是通过 println())?

实际上有没有办法从池中检索连接重用状态?

【问题讨论】:

  • 您可能能够“有线嗅探”以确认它实际上是在重用连接。或者检查服务器上的连接(假设它使用http keep-alives,这是我想象的唯一重用连接的情况......)另见stackoverflow.com/q/3304006/32453

标签: java


【解决方案1】:

来自java.net.URLjavadoc:

返回一个 URLConnection 对象,该对象表示与 URL 引用的远程对象。

每次都会打开一个新连接,通过调用 openConnection 此 URL 的协议处理程序的方法。

如果对于 URL 的协议(例如 HTTP 或 JAR),存在一个 公共的,专门的 URLConnection 子类,属于其中之一 以下包或其子包之一:java.lang、java.io、 java.util, java.net,返回的连接将属于该子类。 例如,对于 HTTP,将返回一个 HttpURLConnection,对于 JAR 将返回一个 JarURLConnection。

所以对于 http 协议 url,它将返回一个 HttpURLConnection

来自java.net.HttpURLConnectionjavadoc:

每个 HttpURLConnection 实例都用于发出单个请求 但是 到 HTTP 服务器的底层网络连接可能会被其他实例透明地共享

所以下划线的 tcp 连接可能会被池化

【讨论】:

  • 好的。同意。但是有可能证明吗?如果您提供示例代码来证明 tcp 连接被池化和重用,将会非常有帮助。
  • @Dilip B S 不可能从代码中证明这一点,这就是它被设计成隐藏在引擎盖下的程度。您必须嗅探网络。
  • hmmm:) 但它似乎只是概念性的。所以也许有办法证明它......我们依赖java doc。如果要求是证明它,那么我们必须。
  • 嗯,必须证明一个编程语言基础库能做到所说的有点奇怪。是否与必须为网络流量分析某种方法更相关?
  • :-) 但我的要求是……无论如何感谢您的回复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
相关资源
最近更新 更多