特性簡介
- 支持請求克隆
- 支持請求取消
- 支持同步/異步請求
- 支持請求限流
同步/異步
同步請求
- 調用RealCall的execute方法
異步請求
- 傳入回調對象Callback,封裝到AysncCall中,AysncCall實現了Runnable接口
- 執行AysncCall-execute方法,執行成功調用onSucess回調函數,執行失敗調用onFailure回調函數
- 單個任務執行完成後在finally塊中輪詢存儲隊列中是否有未執行的請求,如果有且滿足併發執行條件,則將該請求任務放入線程池中執行
異步請求線程池模型
- 採用SynchronousQueue阻塞隊列模型
- 線程保活時間60秒
請求限流
- 異步請求下單個host容許的併發數爲5
問題思考
- 異步請求下向同一個host發起大量請求會有什麼問題?
大量請求進來,會將暫時不能執行的請求任務放到Deque readyAsyncCalls隊列中,無界隊列,因此不會 - 異步請求下執行finally塊輪詢時,會遍歷readyAsyncCalls隊列,會有安全問題麼?
1.readyAsyncCalls隊列模型是非線程安全的
2.遍歷時進行了sychronized保護,因此不會有安全問題
請求重試
- 不同方式發起的請求重試次數不同,谷歌21次、火狐/curl/wget20次、safari16次、http1.0 5次
請求撤銷
- 撤銷方法中會調用套接字的close方法,關閉連接