如何确定java连接池是否与URLConnection一起使用?

时间:2009-08-20 16:23:08

标签: java http connection-pooling

this document可以看出,在使用URLConnection时,在TCP连接池“工作”之前,必须满足许多前提条件。如何确定连接是否正在合并?有没有我可以在太阳jdk检查的对象?

2 个答案:

答案 0 :(得分:1)

这不是真正的连接池,而是本文档讨论的HTTP保持活动机制。如果您可以以任何方式检查网络流量,那么检测此问题的一种简单方法是检查请求。如果它使用的是HTTP / 1.1并且没有“Connection:close”,或者它正在使用HTTP / 1.0并且您确实看到“Connection:Keep-Alive”,那么就请求而言它正在工作。

否则它几乎是一个实现细节。您可以使用调试器来检查实现的内部状态,看看它是否有一些启用keep-alive的字段集。你需要查看源代码。

此外,您的文档建议您查看System.getProperty(“http.keepAlive”)。如果它为null或“true”,那么似乎启用了keep-alive。

答案 1 :(得分:1)

对于Sun JDK 5中包含的Sun的HTTP协议处理程序,您可以检查类sun.net.www.http.HttpClient。成员KeepAliveCache kac拥有持久连接。如果您的连接在HashTable中,它将被重用。

根据您的使用模式,HTTP处理程序中的Keepalive支持可能会出现问题。当连接保留在缓存中时,没有线程响应状态更改,因此连接变得陈旧。重新使用时可能会出现IOException。所以我们通常会禁用keepalive。

如果你真的需要池连接,那么更好的选择是带有池多线程连接管理器的Apache HttpClient。