OkHttp原始碼解析(四)——失敗重連
阿新 • • 發佈:2019-01-25
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.總結
失敗從連部分的程式碼邏輯比較簡單,各位自己去看吧。