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

来源:互联网 发布:sql2000备份数据库 编辑:程序博客网 时间:2024/04/29 00:47

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.总结

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

0 1
原创粉丝点击