当前位置 : 主页 > 网络编程 > 其它编程 >

httpclient设置长连接_HttpComponentsHttpClient连接池(1)结构

来源:互联网 收集:自由互联 发布时间:2023-07-02
在我们平时进行http调用的时候经常使用apachehttpclient这个组件它提供了http连接池管理这里我们对它的实现做分析。另外除了http 在我们平时进行 http调用的时候经常使用apache httpclient这个
在我们平时进行http调用的时候经常使用apachehttpclient这个组件它提供了http连接池管理这里我们对它的实现做分析。另外除了http 在我们平时进行 http调用的时候经常使用apache httpclient这个组件它提供了http连接池管理这里我们对它的实现做分析。另外除了httpclient组件也可以使用spring的resttemplate组件resttemplate一般也是整合 httpclient 组件来实现 http 调用。对于比较老的httpclient 版本(3.x)建议不要使用这里我们基于http components httpclient  4.5.9版本包括一下内容
  • httpclient连接池的关键类和数据结构

  • http连接的申请

  • http连接的释放

  • http连接的重用

  • http连接的keep alive

  • http连接的可用性检查

  • 空闲http连接的清理

  • http请求的retry

  • SSL请求的支持

  • 连接池中的长连接

httpclient 关键类和数据结构

CPool 代表 httpclient连接池其里面存放 CpoolEntry 类型对象作为池化item该对象包含ManagedHttpClientConnection类型对象ManagedHttpClientConnection包装原始java socket作为http连接

  • CPool>httpclient 连接池

  • CPoolEntry>连接池中的 item

  • ManagedHttpClientConnection>包装 socket代表 http 连接

  • PoolingHttpClientConnectionManager>连接池管理器

  • HttpClientBuilder>Builder 模式实现创建 httpclient
88a7a32529e5ed0100e65548ca9a53a5.pngf88bf7b4540337080d60e1c947138802.png307862da8cf3789c3325c178f9f19755.png
  • httpclient 连接池对于每一个 fqdn port 定义为唯一 route对于每一个 route 都有一个 RouteSpecificPool 类型对象对应。这个对象也是一个连接池既在 httpclient 连接池里对每一个 route 访问都独立建立各自的连接池从而实现不同 route 访问连接池隔离。在连接池对象 Cpool 里由 Map 存储key 为 routevalue 为RouteSpecificPool 对象。

  • 连接池对象里有 Set 类型集合 leased代表 global 连接池里正在使用的连接集合。

  • 连接池对象实例里有 LinkedList 类型集合 available代表 global 连接池里可用的连接集合每次申请连接的时候优先从这个集合里获取。

  • 连接池对象里有 LinkedList 类型集合 pending代表 global 连接池里已经没有可用连接的时候正在等待申请的 items 集合。

  • 对于单独 route 的连接池有Set类型集合 leased代表 individual 连接池里正在使用的连接集合。

  • 对于单独 route 的连接池有 LinkedList 类型集合 available代表individual 连接池里可用的连接集合每次申请连接的时候优先从这个集合里获取。

  • 对于单独 route 的连接池有 LinkedList 类型集合 pending代表 individual 连接池里已经没有可用连接的时候正在等待申请的 items集合。

  • CpoolEntry 类型对象代表 global 连接池和 individual 连接池里的池化 item主要属性有idroute 和 managedConnection。

  • ManagedHttpClientConnection 类型实例对象中包含AtomicReference 类型对象包装引用原始 socket代表 http 连接。

目前先写到这里在下一篇文章里我们开始介绍http连接的申请释放重用以及 keep alive。

08340d9bb4e3bfbd90e33fe220b6666b.png
网友评论