原文地址:https://www.jianshu.com/p/6166d28983a2

复用连接池

相关的主要三个类

  1. RealConnection
  2. ConnectionPool
  3. StreamAllocation

对流的处理使用Okio,Okio是okhttp中用于处理io的模块,没接触过的读者可以参考这篇文章:https://www.jianshu.com/p/f5941bcf3a2d

RealConnection 要点

  1. 代表着链接socket的链路,如果拥有了一个RealConnection就代表了我们已经跟服务器有了一条通信链路
  2. 实现了三次握手等操作。
  3. 一个链接对应多个流,链接和流的对应关系通过StreamAllocation来记录。

ConnectionPool 要点

管理http和http/2的链接,以便减少网络请求延迟。同一个address将共享同一个connection。该类实现了复用连接的目标。

  1. ConnectionPool内部以队列方式存储连接
  2. 连接池最多维持5个连接,且每个链接最多活5分钟
  3. 每次添加链接的时候回执行一次清理任务,清理空闲的链接。

StreamAllocation 要点

StreamAllocation 协调了三者的关系:链接、流和回调。

这里谈一下对StreamAllocation的个人理解。
比如我要创建一个流,是需要当前的Connection的,甚至如果当前没有Connection,我是需要知道当前的ConnectionPool的。
这种逻辑的代码无论是写在RealConnection还是ConnectionPool还是Steam中都是不合理的,因此StreamAllocation中就处理了协调这些类的逻辑。

  1. 一个StreamAllocation中包括一个Steam和一个Connection。
  2. StreamAllocation中的方法包括:newStream(创建流),findHealthyConnection(找到可用的链接),streamFinished(关闭流),releaseIfNoNewStreams(释放链接)等等。

OKHttp源码解析 (复用连接池)相关推荐

  1. OkHttp3源码解析(三)——连接池复用

    OKHttp3源码解析系列 OkHttp3源码解析(一)之请求流程 OkHttp3源码解析(二)--拦截器链和缓存策略 本文基于OkHttp3的3.11.0版本 implementation 'com ...

  2. 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想

    OkHttp 现在统治了Android的网络请求领域,最常用的框架是:Retrofit+okhttp.OkHttp的实现原理和设计思想是必须要了解的,读懂和理解流行的框架也是程序员进阶的必经之路,代码 ...

  3. okhttp源码解析(五):代理和DNS

    前言 之前我们分析了okhttp的重试机制,发现在获取可用地址的时候,都需要遍历一个路由选择器,里面保存了可用的地址,那么这些地址是从哪来的呢?这就是本篇分析的重点. 首先我们简单理解一下代理和DNS ...

  4. OkHttp 源码解析(4.9.1 版本)

    文章目录 1.OkHttp 简介 2.OkHttp 配置与基本用法 2.1 依赖引入与配置 2.2 基本用法 3.OkHttp 常见对象介绍 4.OkHttp 源码解析 4.1 当我们调用`okhtt ...

  5. OkHttp源码解析(上)

    导语 学过Android开发的同学都知道,我们使用网络请求获取服务器的数据时,通常使用的是封装好的Retrofit框架,这个框架很好的帮助我们对网络的发起,以及返回的数据进行操作,我们使用起来十分方便 ...

  6. okhttp源码解析

    OkHttp是一个非常优秀的网络请求框架,已被谷歌加入到Android的源码中.目前比较流行的Retrofit也是默认使用OkHttp的.所以OkHttp的源码是一个不容错过的学习资源,学习源码之前, ...

  7. OkHttp源码解析(很细 很长)

    前言 本文是对OkHttp开源库的一个详细解析,如果你觉得自己不够了解OkHttp,想进一步学习一下,相信本文对你会有所帮助. 本文包含了详细的请求流程分析.各大拦截器解读以及自己的一点反思总结,文章 ...

  8. okHttp源码解析------待续

    看该篇文章前首先要熟悉okHttp的使用,建议先读OkHttp的简单使用 本文的源码解析参考链接:okhttp3总和解析 1.从URL请求处理开始分析 由异步将请求加入调度方法开始引入正题: getC ...

  9. ActiveMQ源码解析 建立连接

    作为一个消息中间件,有客户端和服务端两部分代码,这次的源码解析系列主要从客户端的代码入手,分成建立连接.消息发送.消息消费三个部分.趁着我昨天弄明白了源码编译的兴奋劲头还没过去,今天研究一下建立连接的 ...

最新文章

  1. 型网站的架构设计问题----大型高并发高负载网站的系统架构
  2. 史上最全 Java 多线程面试题及答案
  3. 爬虫python编程与cvi编程_与爬虫无关,简单的用python进行科学运算
  4. setInterval()方法只执行一次的解决方法
  5. 挑战NPC(洛谷-P4258)
  6. Json动态添加属性
  7. Cocos2d-html5 2.2.2的屏幕适配方案
  8. 天下苦Vim久矣!硬核程序员教你如何花式退出Vim,一周收获2400星
  9. 深度学习head、neck、backbone三个术语分别是指什么?
  10. C/C++[codeup 1907]吃糖果
  11. [原创]Jenkins持续集成工具介绍
  12. 《计算机操作系统》思维导图
  13. MT6761 android11 linux4.19上IMX258摄像头点不亮原因备忘
  14. QPSK映射关系与差分编码
  15. fifo的rdata_异步FIFO设计与实现
  16. 人工智能识别手写数学公式
  17. STM32的BootLoader 从SD卡更新固件
  18. 微信,新浪登录分享遇到的问题
  19. FileZilla Server源码分析(1)
  20. 卿斯汉:重视云安全 发展云计算

热门文章

  1. 六, 跨语言微服务框架 - Istio Ingress和Egress详解(解决Istio无法外网访问问题)
  2. 从零起步,新时代大学生选择创业还是工作?
  3. word插入和删除水印
  4. Gluster管理命令的总结与归纳
  5. len函数python返回值类型_python的len函数为什么报错
  6. 记一次jenkins 构建go项目经历
  7. 十步会用IOCOMP–iplotx控件
  8. 1214线段覆盖问题——贪心法
  9. 数组的扁平化方法总结
  10. android实现延时的方法,Android实现延时总结