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 为 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。