学习okhttp wiki--Connections.
Connections
尽管你只提供了URL,OkHttp使用三种类型来创建它和你的web服务器的连接:URL,地址(Address)和路由(Route)。
URLs
URLs (例如 https://github.com/square/okhttp) 是HTTP和互联网的基础。除了作为网络上所有事物的一种通用的,去中心化的命名策略,它们还指明了如何访问网络资源。
URLs是抽象的:
它们指定了访问是明文的(http)还是加密的(https),但没有指明哪些加密算法不应该被使用。也没有指定如何验证对方的证书(HostnameVerifier) 和哪些证书被信任(SSLSocketFactory)。
它们没有指定是否应该使用特定的代理服务器,以及如何认证代理服务器。
它们也是具体的:每一个URL标识了一个明确的路径(例如 /square/okhttp) 和查询参数(例如 ?q=sharks&lang=en)。每一个web服务器会支持很多的URL。
Addresses
地址指定了一个web服务器(例如 github.com) 以及连接此服务器需要的所有静态配置:端口号,HTTPS设置,偏好的网络协议(例如 HTTP/2 or SPDY)。
共享同样地址的URL可能也共享同样的底层TCP套接字连接。共享连接有明显的性能优势:更少的延迟,更高的吞吐量(归因于TCP慢启动) 和节省电量。OkHttp使用了一个ConnectionPool来自动重用HTTP/1.x连接,多路复用HTTP/2和SPDY连接。
在OkHttp中,地址的部分字段来自于URL(协议,主机名和端口),其余的来自OkHttpClient。
Routes
路由提供了真正连上web服务器所需要的动态信息。这是一个用于尝试的特定的IP地址(比如由DNS查询发现的),使用的正确的代理服务器(如果用了ProxySelector)和使用哪个版本的TLS来协商(用于HTTPS连接)。
单一的地址可能存在多个路由。例如,一个托管在多个数据中心的web服务器在它的DNS响应中可能产生多个IP地址。
Connections
当你使用OkHttp请求一个URL,下面是它会做的:
它使用这个URL和配置后的OkHttpClient来创建一个address。这个地址说明了我们将如何连接到web服务器。
它尝试从connection pool中取出使用这一地址的连接。
如果在池中没有发现可用的连接,它会选择一个route来尝试。这通常意味着做一个DNS请求来获取服务器的IP地址。然后,如果需要,它会选择一个TLS版本和代理服务器。
如果它是一个新的路由,它会建立一个直接的套接字连接,或者TLS隧道(用于HTTPS穿越HTTP代理),或者直接的TLS连接。如果需要,它会做TLS握手。
它发送HTTP请求,读取响应。
如果连接出了问题,OkHttp会选择另一个路由然后重试。这让OkHttp在部分服务器地址不可访问时可以恢复。在连接池中的连接过期或者尝试的TLS版本不支持时,这种重试也是有用的。
一旦接收到了响应,连接会返回到连接池中,等待在将来的请求中重用。连接在一段时间不被激活后,会从连接池中删除。
学习okhttp wiki--Connections.的更多相关文章
- 学习okhttp wiki--HTTPS
HTTPS OkHttp尝试平衡两个相互竞争的要素: 连通性(Connectivity):连接到尽可能多的服务器.这包括运行最新版本 boringssl 的服务器和不太过时的老版本 OpenSSL 的 ...
- 学习OkHttp wiki--Interceptors
Interceptors 拦截器(Interceptors)是一种强有力的途径,来监控,改写和重试HTTP访问.下面是一个简单的拦截器,对流出的请求和流入的响应记录日志. class LoggingI ...
- OkHttp 官方Wiki【设计思想】
官方Wiki之Calls 原文位置:https://github.com/square/okhttp/wiki/Calls The HTTP client's job is to accept you ...
- OkHttp 官方Wiki之【使用案例】
原文位置:https://github.com/square/okhttp/wiki/Recipes Recipes 食谱/知识点清单 We've written some recipes that ...
- okhttp 基本介绍
资料汇总 官网:http://square.github.io/okhttp/ 文档:https://github.com/square/okhttp/wiki GitHub:https://gith ...
- 使用OkHttp和OkHttpGo获取OneNET云平台数据
图1是OneNET官网关于NB-IoT文档关于批量查询设备最新数据的介绍,可以看到GET方法的URL地址和两个头部信息(图2是Htto请求消息结构).所以在写url时,还要添加两行头部字段名,不然获取 ...
- OkHttp 3.4入门
OkHttp 3.4入门 配置方法 (一)导入Jar包http://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/3.4.0-RC1/okhtt ...
- OkHttp使用进阶 译自OkHttp Github官方教程
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/3997368.html 没有使用过OkHttp的,可以先看Ok ...
- OkHttp使用进阶(译自OkHttp官方教程)
没有使用过OkHttp的,可以先看OkHttp使用介绍 英文版原版地址 Recipes · square/okhttp Wiki 同步get 下载一个文件,打印他的响应头,以string形式打印响应体 ...
随机推荐
- "sfc/scannow" 修复系统,提示 "windows资源保护无法启动修复服务"(win7)
原因: ArcGIS9.3安装后对注册空间进行了限制. 解决方案: 1,输入 regeidt 打开注册表. 2,找到 HKEY_LOCAL_MACHINE\System\CurrentControlS ...
- C# - CSV(Comma-Separated Values)文件读取.
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Sys ...
- 循序渐进Socket网络编程(多客户端、信息共享、文件传输)
循序渐进Socket网络编程(多客户端.信息共享.文件传输) 前言:在最近一个即将结束的项目中使用到了Socket编程,用于调用另一系统进行处理并返回数据.故把Socket的基础知识总结梳理一遍. 1 ...
- poj1418 Viva Confetti 判断圆是否可见
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Viva Confetti Time Limit: 1000MS Memory ...
- [Mugeda HTML5技术教程之9]使用元件
元件是一个可以在舞台上实例化和再利用的预先生成的独立动画.一个元件有它自己的时间轴(层,单位等),可以独立显示的动画.元件提高了动画的重用性和灵活性,是个强大的存在.元件可用于创建复杂的动画效果. 所 ...
- notepad++搜索结果不显示line XX的方法
在使用notepad++如果多次搜索,得到的结果中会出现多次line xx: line xx:,造成文件大量垃圾信息的存在,不利于找寻所需的内容,如下图. 对于这种情况, ...
- JavaScript 系列笔记(一)数据类型
关于JS的数据类型 简单类型有五种:Undifined, Null, Boolean, Number, String 复杂类型有一种:Object 通过typeof 操作符来获取数据类型,此操作符返回 ...
- Centos common software install
1.本地安装soft yum localinstall xxx.rpm 2.kolourpaintyum install kolourpaint
- ida idc函数列表全集
下面是函数描述信息中的约定: 'ea' 线性地址 'success' 0表示函数失败:反之为1 'void'表示函数返回的是没有意义的值(总是0) AddBptEx AddBpt AddCodeXre ...
- MobileProject
iOS开源项目MobileProject功能点介绍 一:MobileProject简介 MobileProject项目是一个以MVC模式搭建的开源功能集合,基于Objective-C上面进行编写,意在 ...