- 版本说明
本文只考虑okhttp3.0.1版本HTTP1.1协议的源码实现(截止2019-3-20日,github上最新版本为3.14.0),虽然版本不同,但是对本文的主题HTTP1.1部分来说,流程变化不大。
- okhttp3.0.1 key tips
1. 写超时时间writeTimeout的含义是:在writeTimeout时间内,向网络输出流中发送2k字节大小的数据失败。
2. retryOnConnectionFailure = true含义:此值为真,并不意味着请求失败时,会无限次重试。其只在以下几种情况下重试:
a. connectionPool连接池中有空闲的连接,当请求直接使用此连接发送数据失败时,会进行重试1次;
b. 当服务端有多个ip地址时,会针对多个ip地址进行重试;
c. 当有多个代理服务器时,会通过ProxySelector进行多次重试。
3. 同一时刻对同一ip的异步请求最多只能有5个,其它的请求会排队等待。
4. 连接超时时间connectionTimeOut的理解误区:
a.在socket建立连接时,并不是一定会等待connectionTimeOut这么长时间。例如,如果手机端断开wifi、无线网络等所有网络连接时,connect会立即返回,报unreachable错误。
b.不同厂商的连接超时时间可能是不同的,根据我的测试,小米手机的最大连接超时时间是40s,华为手机的最大连接超时时间是120s。