1.前言
OKHttp内部是做了失败从连的操作的,那么我就来简单看下失败重连的相关逻辑。
2.RealCall#getResponse 说起
因为是失败从连,所以我们要看cacth相关部分的代码,代码如下:
HttpEngine retryEngine = engine.recover(e, false, null);
if (retryEngine != null) {
releaseConnection = false;
engine = retryEngine;
continue;
}
上面的关键之处在于engine.recover,这个会返回一个HttpEngine对象,并继续执行while循环里的发送请求,读取相应的过程。
3.HttpEngine#recover
在这个方法中,会释放失败的那个HttpEngine所占用的一些资源,并重新new HttpEngine对象。当然,这里的这个对象和我们原来的那个是有区别的,我们看下对比。
原来