Okhttp 浅析

安全的连接

OkHttpClient:

OkHttpClient:

1.线程调度

2.连接池,有则复用,没有就创建

3.interceptor

4.interceptor

5.监听工厂

6.是否失败重试

7.自动修正访问,如果没有权限或认证

8是否重定向  followRedirects

9.协议切换时候是否继续重定向

10.Cookie jar 容器 默认返回空的

11.本地缓存

12 dns 域名解析为dns地址

通过原生方式,根据域名获取DNS/IP地址

13.代理服务器

直连,http,Socket

14.代理的select

默认直连

15.代理授权

16.sslsocket工厂

17.x509 证书验证器,验证合法性

18.连接标准 比如版本 http 1.1 2.0

严格         -       一般              -        基本无限制

不加密传输

19.支持的协议

不加密的HTTP2

20 21 22:

证书验证相关

如果配置错误则会打印报错

多证书

23. call连接超时

24. 网络连接超时

25.读取超时

26.写入超时

27.心跳频率  websocket / http 2

enqueue 是一个接口 Call

client 通用配置等参数

Request 请求相关参数,初始的request

forwebsocket websocket 服务器主动发消息,推送数据,通过http连接

RealCall   Call接口实现类

1 跟踪程序的错误

2 监听所有事件 比如连接 断开 等

enqueue: 执行client.dispatcher.enqueue(AsyncCall xxx) 

dispatcher 线程调度用的Executor

enqueue:

尝试找到有没有当前url的主机

传入AsyncCall 添加到队列,双向队列,准备还未执行的操作

执行已经准备好的Call

取出所有的call 并且取出的值小于设定的值,添加到正在执行的call

遍历执行 executeOn,则执行runnable

executee()  = runnable,发生了线程切换

run

获取相应 getResponseWithInterceptorChain ,然后传给回调

execute: 同步执行, 直接调用getResponseWithInterceptorChain

getResponseWithInterceptorChain: 

将各种拦截器添加到集合中

创建一个拦截器的chain

链式工作

每一个都有前置后置任务

1 第一个拦截器 ,连接错误等进行重置连接

请求,然后重试

判断是哪种错误

找到一个可用连接

如果是重定向等,继续重试

成功则返回结果,否则继续重试

复制一份执行,然后调用下一个链条

2:将已经准备好的连接进行发送和过滤判断

将参数 content-length等进行填充

自动进行压缩 / 解压缩 gzip

3.缓存拦截器

有缓存直接返回

缓存类型:

没有则进行缓存

4.连接拦截器

init

coedc:编码/解码器,然后拼接成Exchange

找到可用健康的连接

先拿到可用连接

然后判断状态,最多5种方式拿到

        取消掉的

        有没有已经建立

  

          结果为空则执行,把call放到池里的连接

        多复用,判断是否可用

        

        拿到一个连接

        判断有没有超限,判断是否是同一个主机TCP端口以及加密方式和代理等配置是否相同,

       

        判断代理

        判断 http2

        判断证书

        如果已经拿到连接,直接返回,否则再进行重试

        复用已经使用过且相等地址端口证书的连接

         5次连接: 

                1有连接直接复用,

                2拿不到则在连接池取一个不多重复用的连接,

                3在拿一个多复用连接,

                4自己创建一个连接,

                5重新取池里多重复用的连接

5.往服务器发送数据拦截器

发请求,读相应

运行

读响应

 然后反式调用上一个拦截器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/215184.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

路由VRRP配置例子

拓朴如下: 主要配置如下: [R1] interface GigabitEthernet0/0/0ip address 10.1.1.1 255.255.255.0 vrrp vrid 1 virtual-ip 10.1.1.254vrrp vrid 1 priority 200vrrp vrid 1 preempt-mode timer delay 20 # interface GigabitEthernet0/0/1ip address …

2023年【汽车驾驶员(中级)】最新解析及汽车驾驶员(中级)试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年汽车驾驶员(中级)最新解析为正在备考汽车驾驶员(中级)操作证的学员准备的理论考试专题,每个月更新的汽车驾驶员(中级)试题及解…

【10套模拟】【10】

关键字: 线性探测次数、冒泡交换性质、排序次数最值、bst查找关键字最多比较次数、m叉树空指针域 链表合并、二叉排序树查找x、堆排序

网工内推 | 美的、得力集团,包吃包住,IE认证优先,14薪

01 美的 招聘岗位:网络工程师 职责描述: 1.负责IT网络设备、IDC机房的日常维护巡检、监控和管理; 2.负责路由、交换、防火墙、无线控制器、AP等网络设备的开通、调整、优化升级; 3.负责公司OT、IT网络规划,项目实施以…

【C语言】qsort的秘密

一,本文目标 qsort函数可以对任意类型数据甚至是结构体内部的数据按照你想要的规则排序,它的功能很强大,可是为什么呢? 我将通过模拟实现qsort函数来让你对这整个过程有一个清晰的深刻的理解。 二,qsort函数原型 v…

P9 C++类

目录 01 类是什么 02 如何创建类 03 方法 后话 本期我们要讲的是 C 中的类。 我们终于讲到了面向对象编程,这是一种非常流行的编程方式,面向对象编程实际上只是一种你可以采用的编写代码的方式,其他语言例如 C#、Java 这些主要是面向对象…

JetLinks设备接入的认识与理解【woodwhales.cn】

为了更好的阅读体验,建议移步至笔者的博客阅读:JetLinks设备接入的认识与理解 1、认识 JetLinks 1.1、官网文档 官网:https://www.jetlinks.cn/ JetLinks 有两个产品:JetLinks-lot和JetLinks-view 官方文档: JetLi…

新式的拉式膜片弹簧离合器设计机械设计CAD

wx供重浩:创享日记 对话框发送:离合器 获取完整论文报告工程源文件 减震弹簧 摩擦片 膜片弹簧 压盘 轴 扭转减震器 从动盘 离合器 离合器的结构设计 为了达到计划书所给的数据要求,设计时应根据车型的类别、使用要求、制造条件,…

mac VScode 添加PHP debug

在VScode里面添加PHP Debug 插件,根据debug描述内容操作 1: 随意在index里面写个方法,然后用浏览器访问你的hello 方法,正常会进入下边的内容 class IndexController {public function index(){return 您好!这是一个[api]示例应用;}public function hello() {phpin…

最新AI创作系统ChatGPT系统运营源码,支持GPT-4图片对话能力,上传图片并识图理解对话,支持DALL-E3文生图

一、AI创作系统 SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!本系统使用NestjsVueTypescript框架技术,持续集成AI能力到本系统。支持OpenAI DALL-E3文生图,…

【香橙派】实战记录1——简介及烧录 Linux 镜像

文章目录 一、简介1、参数2、结构3、其他配件4、下载资料 二、基于 Windows PC 将 Linux 镜像烧写到 TF 卡的方法1、使用 balenaEtcher 烧录 Linux 镜像的方法2、效果 一、简介 Orange Pi Zero 3 香橙派是一款开源的单板卡片电脑, 新一代的arm64开发板,…

2023 最新 PDF.js 在 Vue3 中的使用

因为自己写业务要定制各种 pdf 预览情况(可能),所以采用了 pdf.js 而不是各种第三方封装库,主要还是为了更好的自由度。 一、PDF.js 介绍 官方地址 中文文档 PDF.js 是一个使用 HTML5 构建的便携式文档格式查看器。 pdf.js 是社区…