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

Dea*_*ler 3 httpclient apache-httpclient-4.x

来自netstat -anp | grep我在两个不同的时间,我可以看到HttpClient没有重新使用我的连接.我每次使用不同的URL连接到同一主机

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

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

PoolingClientConnectionManager mgr = new PoolingClientConnectionManager();
mgr.setDefaultMaxPerRoute(30);
mgr.setMaxTotal(30);
Run Code Online (Sandbox Code Playgroud)

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

ok2*_*k2c 9

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

你可以在这做两件事

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

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