1、OkHttp请求整体流程是怎么样?
Request-》OkHttpClient-》RealCall 同步 -》 在调用线程 执行五大拦截器 异步 -》 使用分发器将任务在线程池执行 五大拦截器
---首先AsyncCall --加到等待队列readyAsyncCalls--》判断host有没有 已经存在。有,就赋值原来的。(reuseCallsPerHostFrom)
------》promoteAndExecute()
private fun promoteAndExecute(): Boolean {this.assertThreadDoesntHoldLock()val executableCalls = mutableListOf<AsyncCall>()val isRunning: Booleansynchronized(this) {val i = readyAsyncCalls.iterator()//迭代等待执行异步请求while (i.hasNext()) {val asyncCall = i.next()//正在执行异步请求的任务数 不能大于 64个if (runningAsyncCalls.size >= this.maxRequests) break // Max capacity.//同一个host的请求数 不能大于5if (asyncCall.callsPerHost.get() >= this.maxRequestsPerHost) continue // Host max capacity.i.remove()
//callsPerHost 有多少个相同的host请求asyncCall.callsPerHost.inc