文档章节

OkHttp完全解析(四)连接Connections

k
 kim366
发布于 2016/05/13 19:09
字数 764
阅读 8
收藏 0
点赞 2
评论 0

尽管程序只提供了URL,但是OkHttp在连接web服务器时会使用三种类型:URL, 地址Addresses,路线Route。

[源码分析:4.2] 连接引擎HttpEngine

 

5.1  URL

URLs是抽象的

   * 它们指定了调用是明文的http还是加密的https,而不是那个加密规则系统被使用。它们也没有指定如何验证数字证书,或者应该能够信任哪个数字证书。

   * 它们没有指定是否特定的代理服务器会被使用或者如何证明一个代理服务器。

URLs也是固定的,每个URLs表明一个特定的地址,和查询,每个web服务器持有许多个URL。

5.2  Address

地址指定了一个web服务器,所有的静态配置需要连接到服务器:端口号,https设置,优先级网络协议(像 HTTP/2 或者 SPDY)

共享相同地址的URL也可能共享相同的潜在TCP socket连接。 共享一个连接有巨大的性能优势:低延时,高生产力(因为TCP启动缓慢),省电。OKHttp使用一个可以自动重用chongyo9ngHTTP/1.x 连接,多路传输的HTTP/2连接,SPDY连接的连接池。

在OkHttp中,地址的有些属性来自URL,剩下的来自OkHttpClient。

5.3  Route

路线提供实际连接到web服务器的动态信息。包括连接的IP地址,具体使用的代理服务器,以及协商的TLS版本。

对于一个地址而言,可能有很多的线路,例如,一个托管在多个数据中心的web服务器在其DNS相应中可能产生多个IP地址。

5.4  Connections

当你通过OkHttp请求一个URL时,会发生下面的事情:

   1.通过URL和配置的OkHttpClient创建一个地址。这个地址指定如何连接到web服务器。

   2.试图根据这个地址从连接中恢复一个连接。

   3.如果没有在连接池中找到连接,则选择一条线路连接。这就意味着创建一个DNS请求,获取服务器的IP地址。 然后根据需要,选择一个TLS版本,和代理服务器。

   4.如果这是一条新的线路,则通过创建一个直接的socket连接,一个TLS隧道(对于HTTPS而言是一个HTTP代理),或者创建一个直接的TLS连接。然后进行TLS握手。

   5.发送请求,获取响应。如果连接出问题,OkHttp会选择另外一条路线重试。这就允许OkHttp在服务器地址的子集不可达时进行恢复。 在连接池中的连接陈旧或者尝试的TLS版本不支持时,这一功能也是非常有用的。

    注:TLS: 安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。

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

共有 人打赏支持
k
粉丝 1
博文 129
码字总数 0
作品 0
朝阳
spring传统xml配置okhttp3

问题 后端服务需要使用http客户端请求其他服务支持,项目中需要将HttpClient换成OKhttp,为啥要换OKhttp?这里不讨论这两者之间的优缺点。这篇文章主要关注与Spring传统xml配置方式集成Okhtt...

亚林瓜子 ⋅ 04/19 ⋅ 0

说说在 Android 中如何发送 HTTP 请求

客户端会向服务器发出一条 HTTP 请求,服务器收到请求后会返回一些数据给客户端,然后客户端再对这些数据进行解析与处理。 1 HttpURLConnection 可以使用 HttpURLConnection(官方推荐) 来发...

deniro ⋅ 06/09 ⋅ 0

Android面试有迹可循(一)OkHttp3.9拦截器原理与区别

接上回 传送门 上回我们讲到,OkHttp的请求过程中有个非常重要的东西-“拦截器”,而且拦截器又分为interceptors和networkInterceptors两种,那它们具体有何区别呢?又要怎么来使用?现在来一...

SillyMonkey ⋅ 05/19 ⋅ 0

Android逆向之旅---爆破一款资讯类应用「最右」防抓包策略原理分析

一、逆向分析 首先感谢王同学提供的样本,因为王同学那天找到我咨询我说有一个应用Fiddler抓包失败,其实对于这类问题,我一般都会这么回答:第一你是否安装Fiddler证书了,他说他安装了。第...

jiangwei0910410003 ⋅ 04/25 ⋅ 0

OkHttp3源码解析内部缓存

OkHttp3系列文章 OkHttp3 源码解析执行流程 OkHttp3 源码解析 连接池的复用 如果有了解过OkHttp的执行流程,可以知道,在拦截器链中有一个缓存拦截器CacheInterceptor,里面决定了是由缓存中...

Gillben ⋅ 05/22 ⋅ 0

Android面试的那些答不上来的问题(一)--- OkHttp的拦截器你到底了解多少(上)

前言 前段时间面试了很多家公司(坐标成都,大大小小加起来得20家吧),有时候有些事做多了,你就会发现它的一些窍门或者规律,面试这件事当然也不例外。其实很多公司问到的问题都大同小异,...

SillyMonkey ⋅ 05/10 ⋅ 0

Retrofit源码分析之OKHttpCall

之前在Retrofit源码初探一文中我们提出了三个问题: 什么时候开始将注解中参数拼装成http请求的信息的? 如何产生发起http请求对象的? 如何将对象转换成我们在接口中指定的返回值的? 其中第...

低情商的大仙 ⋅ 05/13 ⋅ 0

Android Retrifot2简单使用学习

简介 Retrofit是一个现在比较火的网络请求框架,它的底层是依靠okhttp实现的(okhttp也是一款很不错的框架之前有使用过),确切的讲,Retrofit是对okhttp的进一步封装,它功能强大,支持同步...

reggie1996 ⋅ 05/27 ⋅ 0

[Tools] [okHttp] 调试笔记 --- 无法找到FormEncodingBuilder类

背景: 网上很多例子在讲okHttp的post和get时会用FormEncodingBuilder来构建RequstBody。 但是在okHttp3上,此接口已经已经变掉了,替代它的是MultipartBuilder。 官方说明: okHttp3所有改动...

kris_fei ⋅ 05/25 ⋅ 0

BAT大厂APP架构演进实践与优化之路

第1章 打车课程项目整体介绍 课程介绍:介绍课程内容、教授方式,讲诉打车业务的整体架构思路;针对打车业务如何进行需求分析和工作量化评估,同时根据工作量化提出课程内容章节计划。 第2章...

13269051240 ⋅ 05/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Kubeflow实战系列:利用TFJob导出分布式TensorFlow模型

介绍 本系列将介绍如何在阿里云容器服务上运行Kubeflow, 本文介绍如何使用TfJob导出分布式模型训练模型。 第一篇:阿里云上使用JupyterHub 第二篇:阿里云上小试TFJob 第三篇:利用TFJob运行...

全部原谅 ⋅ 5分钟前 ⋅ 0

007. 深入JVM学习—老年代

老年代空间的主要目的是用于存储由Eden发送来的对象,一般在经历好几次“Minor GC”还会保存下来的对象,才会被复制到老年代,这样就可以存放更多的对象,同时在老年代中执行GC的次数也相对较...

影狼 ⋅ 6分钟前 ⋅ 0

常见的一些C#开源框架或者开源项目

原:https://blog.csdn.net/qq_27825451/article/details/70666044 Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更......

whoisliang ⋅ 7分钟前 ⋅ 0

设计模式基本原理

刚开始接触编程这行的时候看过设计模式,当时感觉学这些模式没有太大的用处,当时也看不太懂。但是随着慢慢接触这一行,经过一段时间的编程以后,再回过头来看设计模式,发现设计模式的确是太...

王子城 ⋅ 10分钟前 ⋅ 0

阿里云全面支持IPv6!一文揽尽4位大咖精彩演讲

摘要: 自从去年11月以来,阿里巴巴高度重视数据中心的网络改造、云产品改造、应用及网络改造等多个维度,经过半年以来的建设,阿里云已经完成了域名解析等关键产品的分析,现在阿里云已经完...

传授知识的天使 ⋅ 21分钟前 ⋅ 0

windows Android sdk 配置

1、下载Android SDK,点击安装,直接默认路径即可! 下载地址:http://developer.android.com/sdk/index.html 2、默认路径安装后,安装完成,开始配置环境变量。 3、打开计算机属性——高级系...

阿豪boy ⋅ 23分钟前 ⋅ 0

bash shell script 简明教程

User <--> bash <--> kernel shell is not kernel or part of kernel various shells: tcsh, csh, bash, ksh find the using shell: echo $SHELL find all the shells: cat /etc/shells what......

mskk ⋅ 26分钟前 ⋅ 0

Service Mesh简史

William Morgan Service Mesh是一个相当新的概念,讲它的“历史”似乎有些勉强。就目前而言,Service Mesh已经在部分企业生产环境中运行了超过18个月,它的源头可以追溯到2010年前后互联网公...

好雨云帮 ⋅ 26分钟前 ⋅ 0

10个免费的服务器监控工具

监控你的WEB服务器或者WEB主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。 有许多非常好的服...

李朝强 ⋅ 38分钟前 ⋅ 0

压缩工具之zip-tar

zip 支持目录压缩。使用yum安装zip包,使用yum安装unzip包 zip 1.txt.zip 1.txt #将1.txt文件压缩,新生成的压缩文件为1.txt.zip,原文件保留 zip -r 123.zip 123/ #-r对目录操作。将123/目录...

ZHENG-JY ⋅ 39分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部