HttpComponents HttpClient连接池-结构
Posted TA码字
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpComponents HttpClient连接池-结构相关的知识,希望对你有一定的参考价值。
httpclient连接池的关键类和数据结构
http连接的申请
http连接的释放
http连接的重用
http连接的keep alive
http连接的可用性检查
空闲http连接的清理
http请求的retry
SSL请求的支持
连接池中的长连接
CPool 代表 httpclient连接池,其里面存放 CpoolEntry 类型对象作为池化item,该对象包含ManagedHttpClientConnection类型对象,ManagedHttpClientConnection包装原始java socket作为http连接:
CPool==>httpclient 连接池
CPoolEntry==>连接池中的 item
ManagedHttpClientConnection==>包装 socket,代表 http 连接
PoolingHttpClientConnectionManager==>连接池管理器
-
HttpClientBuilder==>Builder 模式实现创建 httpclient
httpclient 连接池对于每一个 fqdn + port 定义为唯一 route,对于每一个 route 都有一个 RouteSpecificPool 类型对象对应。这个对象也是一个连接池,既在 httpclient 连接池里,对每一个 route 访问都独立建立各自的连接池,从而实现不同 route 访问连接池隔离。在连接池对象 Cpool 里由 Map 存储,key 为 route,value 为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,主要属性有id,route 和 managedConnection。
ManagedHttpClientConnection 类型实例对象中包含AtomicReference<Socket> 类型对象,包装引用原始 socket,代表 http 连接。
目前先写到这里,在下一篇文章里我们开始介绍http连接的申请,释放,重用以及 keep alive。
以上是关于HttpComponents HttpClient连接池-结构的主要内容,如果未能解决你的问题,请参考以下文章
HttpComponents HttpClient连接池-结构
org.apache.httpcomponents.httpclient
org.apache.httpcomponents:httpclient 工具类