来自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套接字时,性能非常糟糕!!!!!
答案 0 :(得分:8)
我非常怀疑您的应用程序建立的SSL连接是有状态的。也就是说,服务器请求客户端使用私有证书进行身份验证,从而使其具有特定的安全上下文。 HttpClient检测到这一点并阻止这些连接租用给具有不同安全上下文的调用者。通过强制为每个请求建立新连接而不是冒险将持久SSL连接租赁给错误的用户,HttpClient实际上是安全的。
你可以在这里做两件事
有关详细信息,请参阅HttpClient tutorial
的此部分