文档章节

OkHtto完全解析(二)构建和调用

k
 kim366
发布于 2016/05/13 19:08
字数 1008
阅读 5
收藏 0

要求基于Java 7构建和运行,运行时需兼容Java 6确保 Android平台和旧版本JVM的稳定性。

2.1 通过Maven进行桌面测试

通过Maven在桌面上运行OkHttp测试程序。使用Jetty-ALPN在桌面上运行HTTP/2和SPDY的测试程序。

mvn clean test

2.2 不使用Maven进行桌面测试

2.3 设备测试



1. 调用 Calls

HTTP客户端的工作是接受你的请求,并产生响应。这一点理论上很简单,但是实际上很棘手。

3.1 请求

每个HTTP请求包含一个URL,一个方法(GET或者POST,一个头列表。请求也可能包含一个请求体,或者一个特定类型的数据流。

3.2 响应

HTTP通过响应码202或者404响应请求,还包含头部和自身可选的响应体。

3.3 重写请求

当给OkHttp提供一个HTTP请求时,等于是给了OkHttp一个获取数据的命令。为了保证高效性和正确性,OkHttp会在发送之前重写你的请求。

OkHttp允许添加原始请求中不包含的头部,包括Content-Length, Transfer-Encoding,User-Agent,Host,ConnectionContent-Type。也会在Accept-Encoding默认缺失的情况下,添加一个Accept-Encoding头部使响应压缩透明化。如果已经存在cookie,则OkHttp也会再添加Cookie头部。

有些请求可能存在缓存响应。当缓存响应没有更新时,如果缓存的内容有更新,则OkHttp可以执行一个条件性的GET操作下载一个更新响应。这个请求可能包含一个If-Modified-SinceIf-None-Match头部。

   [源码分析:4.1]

3.4 重写响应

如果使用透明化压缩,则OkHttp会放弃相应的响应头部Content-Type Content-Length, 因为这两个头部不适用于非解压的响应头部。如果条件性GET请求成功,则来自网络和缓存的响应会根据规格直接合并。

3.5 增强请求

如果你请求的URL被移除,web服务器会返回一个类似302的响应码表明文档的新URLOkHttp会跟进这个重定向的地址,并获取最终的响应。如果响应发出一个授权问题,OkHttp会询问认证者(如果有配置的话)是否满足授权要求。如果认证者提供了一个证书,那么请求会包含该证书进行重试。

3.6 重试请求

在下列情况下,连接会失败:线程池陈旧或者断开,web浏览器自身无法到达。这时,OkHttp会获取提供的不同线路进行重试。

3.7 调用

通过重写,重定向,请求增强和重试,你的简单请求可能产生很多个请求和响应。OkHttp使用call来模拟满足你请求的任务,不论需要多少个中间请求和响应。一般情况下不需要很多中间请求和响应,不过,在你的URLs不断重定向或者指向可选IP地址失败的时候,就会这样。

调用会以下列两种方式执行:

     同步执行:线程阻塞,知道响应可读取。

     异步进行:入队请求到任意一个线程,然后在另一个线程中,在响应可读取时获取回调。

可以从任意线程中取消调用。如果调用还没有完成,则取消操作会失败。如果正在写入请求体或者正在读取响应体,则取消操作会触发IOException

3.8 分发

对于同步调用,你需要自己管理创建的同步请求。同步请求太多会浪费资源,太少会导致延迟。

对于异步调用,分发器会实现满足最大数量同步请求的代理。你也可以为每个web服务器设置最大值(默认是5个)或者为所有web服务器设置最大总和(默认是64个)。

 

 


本文转载自:http://blog.csdn.net/oyangyujun/article/details/50039215

共有 人打赏支持
k
粉丝 1
博文 129
码字总数 0
作品 0
朝阳
私信 提问
Android 一个改善的okHttp封装库

一、概述 之前写了篇Android OkHttp完全解析 是时候来了解OkHttp了,其实主要是作为okhttp的普及文章,当然里面也简单封装了工具类,没想到关注和使用的人还挺多的,由于这股热情,该工具类中...

百世经纶一页书梵天
2016/12/02
16
0
MyBatis实战(二)-一级缓存原理解析

1 概论 每当我们使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数据库会话 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取...

芥末无疆sss
10/06
0
0
你真正了解UI线程更新的几种方式吗—面试必备之深度揭秘

你真正了解UI线程更新的几种方式吗——面试必备之UI刷新大解密 我们都知道一般面试的时候都会问道Handler的运行机制。有些时候面试官不会直接问道。但是如果问道UI线程更新的方式有哪几种,你...

codeGoogle
2017/10/26
0
0
LNMP平台部署及应用

LAMP平台应该是目前应用最为广泛的网站服务器架构,但随着Nginx在企业中的使用越来越多,LNMP(或LEMP)架构也受到越来越多Linux系统工程师的青睐,其中"E"来自于Nginx的发音[engine x] 构建...

杨书凡
01/13
0
0
CMS开源项目--SiteMate

一、概述 (一)SiteMate,以CMS为起步,但超越CMS的概念设计,传承ASP.NET的优秀设计理念,延展ASP.NET的应用框架。 (二)支持网站集群。 (三)支持部署手机网站。 二、智能模板系统: (...

SiteMate_CMS
2015/06/03
4.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

windows下让 jar 在后台运行的办法

windows下 运行 java jar 不出现 命令行 窗口 新建一个披处理 run.bat,内容如下 @echo off start javaw -jar xx.jar exit 双击运行即可。...

glen_xu
12分钟前
1
0
jdk1.8 lambda stream 指定的对象属性进行去重

原因:因为Stream提供的distinct()方法只能去除重复的对象,无法根据指定的对象属性进行去重,可以应付简单场景。 解决方案: //去重,共同信息保存到bizPledgeSupplierVOs里bizPledgeSupp...

INSISTQIAO
14分钟前
0
0
vue nextTick深入理解---vue性能优化、DOM更新时机、事件循环机制

定义[nextTick、事件循环] nextTick的由来: 由于vue的数据驱动视图更新是异步的,即修改数据的当下,视图不会立即更新,而是等同一事件循环中的所有数据变化完成之后再统一进行视图更新。...

JamesView
22分钟前
1
0
常用汉字编码

GB2312 仅包含大部分的常用简体汉字,但已经不能适应现在的需要; GB13000 由于GB2312的局限性,国家标准化委员会制定了GB13000编码; 但由于当时的硬件和软件都已经支持了GB2312,而GB13000...

晨猫
24分钟前
1
0
纳尼?我的Gradle build编译只要1s

https://juejin.im/post/5c00ec39e51d4555ec0394f6

SuShine
25分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部