学习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形式打印响应体 ...
随机推荐
- windows internal读书笔记
程序:指一个静态的指令序列,而进程则是一个容器,其中包含了当执行一个程序特定实例时所用到的各种资源.
- linux局域网不能相互访问
1.关闭防火墙 /etc/init.d/iptable stop 2.关闭selinux 1.临时禁用SELinux: root@server# setenforce 0 这样重启服务器之后 ...
- Swift中对计算属性的理解和对之前的补充
这个功能的重点作用应该是在计算上. 对于一般的属性,要么直接存一个,要么直接读一个,计算属性则可以根据所设置内容,进行一些修改或计算之类的, 比如: import UIKit class sample ...
- 【转】【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
转自:http://www.cnblogs.com/particle/archive/2012/09/01/2667034.html#commentform malloc: 原型:extern voi ...
- Oracle—用户管理的备份(一)
用户管理的备份(一) 一.首先要知道数据库中表空间和文件的信息,有几个性能视图,v$datafile,v$tablespace,v$tempfile,v$logfile,v$controlfile,d ...
- 如何使用sql语句使你的数据库减肥,下面以网狐6603数据库减肥脚本举例!
原文转自:http://www.zccode.com/forum.php?mod=viewthread&tid=637&extra=page%3D1 网狐6603 专用数据库减肥特效脚 ...
- Factorial Solved Problem code: FCTRL
import sys #import psyco #很奇怪,这题用psyco就runtime error #psyco.full() def z(n): #这个应该是技巧的一种算法 r = 0 whi ...
- JDBC开发模式
一]代码模块———Demo.java public class Demo { private static Connection connection; private static Statemen ...
- hdu Big Number
#include <cstdio> #include <cstring> #include <cmath> using namespace std; int mai ...
- Codeforces 158E Phone Talks
http://codeforces.com/contest/158/problem/E 题目大意: 麦克是个名人每天都要接n电话,每通电话给出打来的时间和持续时间,麦克可以选择接或不接,但是只能不接k ...