5

来自 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 套接字!!!!!!

4

1 回答 1

13

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

你可以在这里做两件事

有关详细信息,请参阅HttpClient 教程的这一部分

于 2012-10-24T12:22:03.800 回答