当前位置: 首页 > 知识库问答 >
问题:

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

李昊苍
2023-03-14

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

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

有没有办法让HttpClient在代理基础上保持连接?也就是说,HttpClient只维护到给定代理的指定数量的连接。

共有1个答案

锺伟志
2023-03-14

经过深入研究,Apache HttpClient似乎不支持开箱即用的这种行为。我必须修改HttpClient/HttpCore源才能拥有此功能,即。仅根据localAddress和First Proxy地址维护持久连接。

我修改的类是:

组织。阿帕奇。http。康涅狄格州。httpount。java和org。阿帕奇。http。康涅狄格州。基本负责人。JAVA

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

上述修改的初始测试结果显示,在我的场景中,请求吞吐量提高了大约100倍。到目前为止,对我来说还不错。

凯文

 类似资料:
  • 我有一个服务器和一个客户端,它们有自己的引导程序。我的问题是,不同的连接用于不同的目的。一个用于控制通道(与服务器通信并返回),然后建立其他连接以进行数据传输。我以编程方式将idlestate处理程序仅添加到需要它的连接管道中,但在调试之后,我发现无论连接如何,通道总是相同的。因此,我的数据传输正在影响生存。我通过向netty IdleStateHandler添加调试并输出通道id看到了这一点。很

  • 我尝试将nginx配置为动态处理所有/{{app}}/query请求,以访问laravel应用程序,如下所示: 目前,nginx将我的请求路由到正确的目录和文件。例如: ...路线: 我还可以回显var_export($_GET)并查看该查询: 但拉拉维尔·艾尔维斯说: 但是为什么呢? 路线看起来像这样: php artisan路由:列表返回: 我的Laravel版本是5.2.33我使用Ubunt

  • 我有一个XML文件,如下所示 我的XSL看起来像这样 然后,我尝试达到节点内元素的每个值 它没有显示值!我认为这是一种正确的方式。首先,我有for each select=“//警报,然后我有<代码> 请帮忙。

  • 由于在 StackOverflow 上已经有很多关于这个问题的问题,我首先要确保这不是重复和区分。 这是关于 在 2 个不同的身份验证 管理器中具有 2(或更多)不同的身份验证提供程序,以用于不同的路由。 使用 Spring Security 5.5 而不是 3.x 中的方法 使用基于非 XML 配置的方法 所以问题不在于: 如何在身份验证管理器中包含多个身份验证以提供“替代身份验证”(大多数问题

  • 而不是绘制整个代理集(零售商)的汇总平均值

  • 我试图使用web控制台获取页面上所有h2标记中的文本。 我所发现的就是使用每一种,我已经试过了 但是它返回