okhttp-瞭解一些特性

特性簡介

  1. 支持請求克隆
  2. 支持請求取消
  3. 支持同步/異步請求
  4. 支持請求限流

同步/異步

同步請求

  1. 調用RealCall的execute方法

異步請求

  1. 傳入回調對象Callback,封裝到AysncCall中,AysncCall實現了Runnable接口
  2. 執行AysncCall-execute方法,執行成功調用onSucess回調函數,執行失敗調用onFailure回調函數
  3. 單個任務執行完成後在finally塊中輪詢存儲隊列中是否有未執行的請求,如果有且滿足併發執行條件,則將該請求任務放入線程池中執行
異步請求線程池模型
  1. 採用SynchronousQueue阻塞隊列模型
  2. 線程保活時間60秒

請求限流

  1. 異步請求下單個host容許的併發數爲5

問題思考

  1. 異步請求下向同一個host發起大量請求會有什麼問題?
    大量請求進來,會將暫時不能執行的請求任務放到Deque readyAsyncCalls隊列中,無界隊列,因此不會
  2. 異步請求下執行finally塊輪詢時,會遍歷readyAsyncCalls隊列,會有安全問題麼?
    1.readyAsyncCalls隊列模型是非線程安全的
    2.遍歷時進行了sychronized保護,因此不會有安全問題

請求重試

  1. 不同方式發起的請求重試次數不同,谷歌21次、火狐/curl/wget20次、safari16次、http1.0 5次

請求撤銷

  1. 撤銷方法中會調用套接字的close方法,關閉連接
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章