1. 程式人生 > >OkHttp原始碼解析(四)——失敗重連

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, caller
WritesRequestBody, forWebSocket, streamAllocation, (RetryableSink) requestBodyOut, priorResponse);

額,很明顯的差距就是一些在重新new的時候將我們原先包裝的一些物件加入進去,省去了二次包裝的過程,

4.總結

失敗從連部分的程式碼邏輯比較簡單,各位自己去看吧。