OkHttp源码解析(四)——失败重连

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对象。当然,这里的这个对象和我们原来的那个是有区别的,我们看下对比。
原来

new HttpEngine(client, request, false, false, forWebSocket, null, null, null);

重新的

new HttpEngine(client, userRequest, bufferRequestBody, callerWritesRequestBody,
        forWebSocket, streamAllocation, (RetryableSink) requestBodyOut, priorResponse);

额,很明显的差距就是一些在重新new的时候将我们原先包装的一些对象加入进去,省去了二次包装的过程,

4.总结

失败从连部分的代码逻辑比较简单,各位自己去看吧。

你可能感兴趣的:(Android)