OKHttp框架源码分析(一)
来源:互联网 发布:天启挂机 源码 编辑:程序博客网 时间:2024/06/10 06:21
1 总体设计
上面是OkHttp的总体设计图,主要是通过Dispatcher不断从RequestQueue中取出请求(Call),根据是否已经有缓存调用Cache或者NetWord这两类数据获取接口,从内存缓存或者服务器请求得到数据。OkHttp有两者请求方式,同步请求和异步请求。通过请求时通过Call.execute()直接返回当前的Response,而异步请求会把当前的请求通过call.enqueue添加到请求队列的方式。
接下来会介绍一些比较重要的类,是通过翻译文档所得:
1 Route.java
连接到达一个远程服务器所使用的具体路由。当我们创建一个连接时,客户端有多种选择。
- Http代理
- IP地址
- 配置TLS
Route其实就是对地址的一个封装类。但是很重要。
2 Platform.java
针对不同平台的特定特性。
- 服务器名的识别: 在Android 2.3以上支持
- Session: 在Android 2.3以上支持
- Android 交换状态 : Android 4.0 以上支持
- 应用层协议协商 : 在Android5.0支持
Platform这个类主要做平台适应性,针对Android2.3到5.0后的网络请求的适配支持。同时,这个类中能看到针对不同的平台,通过java反射不同的Class是不一样的。
3 Connection.java
Connection.java是一个接口
public interface Connection { Route route(); Socket socket(); Handshake handshake(); Protocol protocol();}
Socket和http、https等的连接。与远程主机的连接开通通过代理或者直接连接。RealConnection.java实现了这个接口,应用可以用这个类作为ConnectionPool的属性来对HTTP连接进行管理。
4 ConnectionPool.java
管理HTTP和SPYD的复用以减少网络时延。要求具有相同目的地址的HTTP请求将会共享一个连接。这个类实现决定哪个连接持续保持以便将来使用。
5 Request.java
一个HTTP请求, 这个类的对象是不可变的。
6 Response.java
一个HTTP回复, 这个类的对象是不能改变的。
7 Call.jva
Call是一个已经准备好执行的Request,Call可以被取消。所有的这个类对象代表一个请求/回复对。它不可以执行两次。
8 Dispatcher.java
这个类决定异步请求何时被执行。所有的Dispahtcher在内部使用ExecutorService来执行call。
9 HttpEngine.java
解决单个的HTTP请求/返回对。每个HTTP 按下面的步骤
- 创建HttpEngine
- 通过sendRequest()方法发送请求消息。如果一个reqeust已经被发送了,那么修改request的头部是错误的。
- 通过readResponse来读取response的消息。
当Request的请求方式为get时,response可能为cache、network或者两者的结合。
10 Internal.java
11 Cache.java
HTTP、HTTPS请求的response缓存到本地文件,返回的重用,可以节省时间和带宽。
请求流程图
下面是关于OKHttp的请求流程图
- OKHttp框架源码分析(一)
- OKHttp源码分析1 - 框架
- okhttp网络框架源码分析
- 网络框架okHttp源码分析
- OKHttp源码分析(一)
- OkHttp源码分析(一)
- OkHttp源码分析之基本框架1
- OkHttp源码分析之基本框架2
- Okhttp 框架使用和源码分析
- OKHTTP源码分析(一)异步方法
- Android网络框架:OKHttp源码简单解析(一)
- OkHttp源码分析
- OkHttp源码分析
- OkHttp源码分析
- OKHttp源码分析
- OkHttp源码分析
- OKHttp源码分析
- okhttp源码分析
- hibernate中executeFind()方法和execute()方法区别
- UVA 1220 Party at Hali-Bula(树的最大独立集)
- 关于mybatis Mapped Statements collection does not contain value for的问题
- fbauth2 is missing from your Info.plist under LSApplicationQueriesSchemes and is required for iOS 9.
- git on server(ssh)深入剖析,github提供服务原理
- OKHttp框架源码分析(一)
- Broadcast广播
- 【不积跬步_无以至千里】 数学知识(不定时整理)
- UVALive-4329-Ping-pong
- 开发线程安全的Servlet
- Android内存泄露分析
- session入redis
- 安卓中浏览器点击图标自动跳转网址
- dp、dpi、pt、sp的关系