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

如何从HttpClient设置最小空闲http连接。自定义()?

郎鹤龄
2023-03-14

我正在使用HttpClients在客户端创建一个连接管理器。custom()和更高版本设置所有必要的配置

我想要的是设置每个路由在任何时候的最小空闲连接数。目前,空闲连接在keepalivesttrategy中设置的保持活动时间后关闭。我已经阅读了多篇帖子和Apache文档,但这一点在任何地方都没有讨论过。

HttpClients.custom()
   .setMaxConnTotal(20)
    .setMaxConnPerRoute(5)
     .setHostnameVerifier(...)
      .setSSLSockerFactory(...)
       .setKeepAliveStrategy(...)
        .build();

有没有办法做到这一点?

我为什么问这个?因为在保持活动时间之后从客户机到服务器的每个请求在打开新连接时都会花费大量时间,导致性能低下。

共有1个答案

尉迟宇定
2023-03-14

Apache HttpClient不会主动地按设计建立连接。

这里有三个选项:

  1. 让连接保持更长时间
  2. 每隔一段时间执行廉价的HEAD请求以保持路由始终准备就绪
  3. 手动租用并释放给定路由的连接。
 类似资料:
  • 在 Apache HttpClient 4.3 版本上配置连接空闲超时的最短方法是什么? 我看了文档,什么也找不到。我的目标是将开放连接减少到最小的服务器峰值。 例如,在Jetty客户端8. x中,您可以设置httpClient.setIdleTimeout:http://download.eclipse.org/jetty/stable-8/apidocs/org/eclipse/jetty/c

  • 在OkHttp中,我找不到设置硬最大连接池大小的方法。从留档https://square.github.io/okhttp/3.x/okhttp/okhttp3/ConnectionPool.html很明显,您可以设置最大空闲连接,但不能设置整体最大值。这意味着在高负载下,它可以增长超过任何限制。 有没有办法最大化池?如果没有,为什么没有?

  • 建议最多的问题没有答案。 我想为建立和维护的整个http连接设置一个特定的标头(keep-alive设置为true),即, 我提出的每个请求都应该包含我的自定义头。显然, 不是一个选项,因为它为整个设置标头,而我希望它只用于特定的连接,该连接是在我第一次调用服务器上的URL时创建的。 然后,该服务器将连接保持为活动状态,并希望我在连接处于活动状态时发出的每个后续请求都有一个MyHeader头。

  • null 如果我理解正确的话,我们应该在启动时有1个空闲连接,根据负载从0到3,对吗? 正在发生的情况是:启动时1个连接,如果负载较低,最多3个空闲连接,高负载后超过3个空闲连接。然后这些连接不会立即关闭,我们不知道它们何时/是否会关闭(有时它们中的一些会关闭)。 所以问题是:这种行为正常吗? DAO子类的使用示例:

  • 我有两个oracle DB,但我在主数据库中得到“空闲实例,如下所示。

  • 在配置DBCP2池时,根据文档,我注意到-有一个名为timebetweenvictionrunsmillis的配置,描述如下: 空闲对象逐出器线程运行之间的Hibernate毫秒数。如果为非正,则不会运行空闲对象逐出器线程。 其默认值为-1。 这是否意味着逐出器线程永远不会在默认配置下运行?那么配置参数maxIdle是如何强制的?如果空闲连接的计数大于maxIdle,池必须退出空闲连接。 默认配置