HttpClient不会重复使用我的连接,不断创建新的连接

时间:2012-10-23 16:22:02

标签: httpclient apache-httpclient-4.x

来自netstat -anp | grep我在两个不同的时间,我可以看到HttpClient没有重新使用我的连接。我每次使用不同的网址(例如

)连接到同一主机

为什么HttpClient不仅每次都重复使用与myhost.com相同的连接?

我有以下代码用于初始化我传递给HttpClient的池...

PoolingClientConnectionManager mgr = new PoolingClientConnectionManager();
mgr.setDefaultMaxPerRoute(30);
mgr.setMaxTotal(30);

我看到他们正在使用HttpRoute并且在equals中有localAddress,这似乎很奇怪,因为HttpRoute应该只对主机名和模式(https / http)相等,就是这样,对吧?这与它有关吗?这是一个错误吗?每次重新建立https套接字时,性能非常糟糕!!!!!

1 个答案:

答案 0 :(得分:8)

我非常怀疑您的应用程序建立的SSL连接是有状态的。也就是说,服务器请求客户端使用私有证书进行身份验证,从而使其具有特定的安全上下文。 HttpClient检测到这一点并阻止这些连接租用给具有不同安全上下文的调用者。通过强制为每个请求建立新连接而不是冒险将持久SSL连接租赁给错误的用户,HttpClient实际上是安全的。

你可以在这里做两件事

  • 禁用连接状态跟踪
  • 确保所有逻辑相关的请求共享相同的上下文(推荐)

有关详细信息,请参阅HttpClient tutorial

的此部分