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

Apache HttpClient连接配置

曾歌者
2023-03-14

我试图通过HttpClientBuilder设置一个HttpClient。我还看了看HttpClientConnectionManager,这里开始混淆了。

在ConnectionManager上,或者更确切地说,在PoolghttpClientConnectionManager上,有一些方法可以:

  • 关闭过期连接
  • 关闭空闲连接

连接何时被视为过期?
它何时空闲?
当来自池中的连接关闭时会发生什么?是否确保在需要时重新创建连接?

共有2个答案

司马洲
2023-03-14

根据:https://hc.apache.org/httpcomponents-client-4.5.x/current/tutorial/html/connmgmt.html#d5e418

HttpClient试图通过测试连接是否“陈旧”来缓解问题,在使用连接执行HTTP请求之前,连接是否“陈旧”不再有效,因为它在服务器端已关闭。陈旧的连接检查不是100%可靠的。唯一不涉及空闲连接的每个套接字一个线程模型的可行解决方案是一个专用的监控线程,用于驱逐由于长时间不活动而被视为过期的连接。监控线程可以定期调用ClientConnectionManager#closeExpiredConnections()方法来关闭所有过期的连接并从池中驱逐关闭的连接。它还可以选择性地调用ClientConnectionManager#closeIdleConnections()方法来关闭在给定时间段内一直处于空闲状态的所有连接。

过期和空闲之间的区别在于,过期连接在服务器端已关闭,而空闲连接在服务器端不一定关闭,但在一段时间内处于空闲状态。当连接关闭时,它在要使用的池中再次可用。

松英喆
2023-03-14

虽然HTTP是一种请求-响应协议,但打开和关闭连接的成本相当高,因此HTTP/1.1允许重用现有连接。使用标题Connection:keep alive,即告诉客户端(即浏览器)保持与服务器的连接打开。一台服务器可以同时打开成千上万个连接。为了避免耗尽服务器的资源,通常会及时限制连接。通过套接字超时空闲连接或存在某些连接问题的连接(断开的互联网访问…)在一段预定义的时间后,服务器会自动关闭。

很多HTTP实现,如Apaches HTTP client 4.4及更高版本,只在连接即将使用时才检查连接的状态。

4.4版更改了对陈旧连接的处理。以前,代码会在重新使用之前默认检查每个连接。代码现在仅在自上次使用连接以来的经过时间超过已设置的超时时检查连接。默认超时设置为2000ms(来源)

因此,如果一个连接可能有一段时间没有被使用,那么客户端可能没有从服务器读取ACK-FIN,因此,当服务器在一段时间前实际上已经关闭连接时,客户端仍然认为该连接是打开的。这种连接已过期,通常称为半关闭。因此,可以由池收集。

请注意,如果发送包含连接:closeHTTP头的请求,则应在客户端收到响应后立即关闭连接。

打开连接的状态可以通过netstat进行检查,这在大多数现代操作系统中都应该存在。我最近不得不检查我们的一个HTTP客户机,该客户机是通过第三方库管理的,该库没有正确传播连接:Close头,因此导致大量半关闭的连接。

 类似资料:
  • detachedException:无法执行查询。未配置连接org.jooq.impl.abstractquery.execute(abstractquery.java:316)org.jooq.impl.abstractresultquery.fetchlazy(abstractresultquery.java:365)org.jooq.impl.abstractresultquery.fetc

  • Hyperledger Composer使用连接配置文件连接到运行时。 创建连接配置文件 1.创建一个名为connection.json的新文件,其中包含Hyperledger Fabric v1.0的以下信息。} 为Hyperledger Fabric v1.0创建连接配置文件,使用以下格式: { "type": "hlfv1", "orderers":

  • 问题内容: 我试图在Mac Mini上配置Jenkins,以便从BitBucket存储库中提取iPhone App的代码。在“ Xcode插件”配置区域中,我尝试添加项目的git地址,但是它一直失败。经过研究,看来我必须使用ssh部署密钥来连接Bitbucket和Jenkins。到目前为止,我所做的是: 并且我将此SSH密钥添加到了我的BitBucket配置文件中。 不幸的是,它仍然无法正常工作。

  • 本文向大家介绍Oracle连接配置解读,包括了Oracle连接配置解读的使用技巧和注意事项,需要的朋友参考一下 安装ORACLE数据库软件,dbca安装数据库后,需要配置listener连接数据库。这里有一些概念比较难理解,记录一些分析实战结论。 从连接端讲起。 1 连接数据库的方式 oracle的连接串有几部分构成,这里就按sqlplus为例,一个完成的连接串遵循下面格式 下面先讲只有liste

  • 我正在尝试连接Hive数据库与我的Java代码。我搜索了很多关于Hive_Client的信息,但是有很多错误和依赖,有人能帮我找到代码和库文件吗。

  • 我们有一个项目是建立在双向grpc客户机/服务器上的C++。客户端只与服务器建立一个连接。服务器将有多个客户端。通过“netstat”命令,服务器端显示来自同一客户端的多个已建立的连接,但客户端当时只有一个与该服务器的活动连接。 以下是一个例子: tcp6 0 0 serverip:端口clientip:48677已建立 tcp6 0 0 serverip:端口clientip:53149已建立