首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache HttpClient 4每个代理而不是每个路由的持久连接

Apache HttpClient 4每个代理而不是每个路由的持久连接
EN

Stack Overflow用户
提问于 2012-11-17 06:24:12
回答 1查看 804关注 0票数 3

我的理解是,ClientConnectionManager的所有实现都基于路由来保持连接。如果涉及代理,这将导致基本上没有持久连接。例如,HttpClient需要通过具有固定IP的HTTP代理访问1000个不同的域,它必须建立到代理的至少1000个连接,而不是创建到代理的1个持久连接,并将其重用于1000个请求。

我正在模拟多个用户访问数以千计的域名(假域名,所有域名解析为几个I,解析发生在代理之后,所以与HttpClient无关)。当我增加用户和域的数量时,上述行为很快就会用完本地主机中的所有可用端口,结果就会出现地址绑定错误。

有没有办法让HttpClient在代理的基础上保持连接?即。HttpClient仅维护到给定代理的指定数量的连接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-22 04:30:52

经过深入研究,Apache HttpClient似乎不支持这种开箱即用的行为。我必须修改HttpClient/HttpCore源代码,以便具有此功能,即。仅基于localAddress和第一个代理地址维护持久连接。

我修改的类是:

org.apache.http.conn.routing.HttpRounte.java和org.apache.http.conn.routing.BasicRouteDirector.java.

基本上,我更改了HttpRoute中的hashCode和equal方法(它被用作持久conn查找的哈希表的键),因此如果涉及代理,则查找不会考虑目标地址。

上述修改的初步测试结果显示,在我的场景中,请求吞吐量大约提高了100倍。到目前为止,它对我来说工作得很好。

凯文

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13425327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档