OKHttp源码解析 (复用连接池)
原文地址:https://www.jianshu.com/p/6166d28983a2
复用连接池
相关的主要三个类
- RealConnection
- ConnectionPool
- StreamAllocation
对流的处理使用Okio,Okio是okhttp中用于处理io的模块,没接触过的读者可以参考这篇文章:https://www.jianshu.com/p/f5941bcf3a2d
RealConnection 要点
- 代表着链接socket的链路,如果拥有了一个RealConnection就代表了我们已经跟服务器有了一条通信链路
- 实现了三次握手等操作。
- 一个链接对应多个流,链接和流的对应关系通过StreamAllocation来记录。
ConnectionPool 要点
管理http和http/2的链接,以便减少网络请求延迟。同一个address将共享同一个connection。该类实现了复用连接的目标。
- ConnectionPool内部以队列方式存储连接
- 连接池最多维持5个连接,且每个链接最多活5分钟
- 每次添加链接的时候回执行一次清理任务,清理空闲的链接。
StreamAllocation 要点
StreamAllocation 协调了三者的关系:链接、流和回调。
这里谈一下对StreamAllocation的个人理解。
比如我要创建一个流,是需要当前的Connection的,甚至如果当前没有Connection,我是需要知道当前的ConnectionPool的。
这种逻辑的代码无论是写在RealConnection还是ConnectionPool还是Steam中都是不合理的,因此StreamAllocation中就处理了协调这些类的逻辑。
- 一个StreamAllocation中包括一个Steam和一个Connection。
- StreamAllocation中的方法包括:newStream(创建流),findHealthyConnection(找到可用的链接),streamFinished(关闭流),releaseIfNoNewStreams(释放链接)等等。
OKHttp源码解析 (复用连接池)相关推荐
- OkHttp3源码解析(三)——连接池复用
OKHttp3源码解析系列 OkHttp3源码解析(一)之请求流程 OkHttp3源码解析(二)--拦截器链和缓存策略 本文基于OkHttp3的3.11.0版本 implementation 'com ...
- 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想
OkHttp 现在统治了Android的网络请求领域,最常用的框架是:Retrofit+okhttp.OkHttp的实现原理和设计思想是必须要了解的,读懂和理解流行的框架也是程序员进阶的必经之路,代码 ...
- okhttp源码解析(五):代理和DNS
前言 之前我们分析了okhttp的重试机制,发现在获取可用地址的时候,都需要遍历一个路由选择器,里面保存了可用的地址,那么这些地址是从哪来的呢?这就是本篇分析的重点. 首先我们简单理解一下代理和DNS ...
- OkHttp 源码解析(4.9.1 版本)
文章目录 1.OkHttp 简介 2.OkHttp 配置与基本用法 2.1 依赖引入与配置 2.2 基本用法 3.OkHttp 常见对象介绍 4.OkHttp 源码解析 4.1 当我们调用`okhtt ...
- OkHttp源码解析(上)
导语 学过Android开发的同学都知道,我们使用网络请求获取服务器的数据时,通常使用的是封装好的Retrofit框架,这个框架很好的帮助我们对网络的发起,以及返回的数据进行操作,我们使用起来十分方便 ...
- okhttp源码解析
OkHttp是一个非常优秀的网络请求框架,已被谷歌加入到Android的源码中.目前比较流行的Retrofit也是默认使用OkHttp的.所以OkHttp的源码是一个不容错过的学习资源,学习源码之前, ...
- OkHttp源码解析(很细 很长)
前言 本文是对OkHttp开源库的一个详细解析,如果你觉得自己不够了解OkHttp,想进一步学习一下,相信本文对你会有所帮助. 本文包含了详细的请求流程分析.各大拦截器解读以及自己的一点反思总结,文章 ...
- okHttp源码解析------待续
看该篇文章前首先要熟悉okHttp的使用,建议先读OkHttp的简单使用 本文的源码解析参考链接:okhttp3总和解析 1.从URL请求处理开始分析 由异步将请求加入调度方法开始引入正题: getC ...
- ActiveMQ源码解析 建立连接
作为一个消息中间件,有客户端和服务端两部分代码,这次的源码解析系列主要从客户端的代码入手,分成建立连接.消息发送.消息消费三个部分.趁着我昨天弄明白了源码编译的兴奋劲头还没过去,今天研究一下建立连接的 ...
最新文章
- 型网站的架构设计问题----大型高并发高负载网站的系统架构
- 史上最全 Java 多线程面试题及答案
- 爬虫python编程与cvi编程_与爬虫无关,简单的用python进行科学运算
- setInterval()方法只执行一次的解决方法
- 挑战NPC(洛谷-P4258)
- Json动态添加属性
- Cocos2d-html5 2.2.2的屏幕适配方案
- 天下苦Vim久矣!硬核程序员教你如何花式退出Vim,一周收获2400星
- 深度学习head、neck、backbone三个术语分别是指什么?
- C/C++[codeup 1907]吃糖果
- [原创]Jenkins持续集成工具介绍
- 《计算机操作系统》思维导图
- MT6761 android11 linux4.19上IMX258摄像头点不亮原因备忘
- QPSK映射关系与差分编码
- fifo的rdata_异步FIFO设计与实现
- 人工智能识别手写数学公式
- STM32的BootLoader 从SD卡更新固件
- 微信,新浪登录分享遇到的问题
- FileZilla Server源码分析(1)
- 卿斯汉:重视云安全 发展云计算