OkHttp支持的最大同时请求数量是64个,最大共同请求主机是5个,那么当高并发当情况下,OkHttp是如何管理这些请求的呢?查看源码可以发现,源码中有一个Dispatcher
Dispathcer ,Policy on when async requests are executed
这句话的意思就是这个Dispatcher是当多个异步请求执行时的代理
但是每一个Dispathcer被使用的时候其实是通过ExecutorService来管理请求的生命周期,如果不使用默认的ExecutorService,而自定义一个ExecutorService,那么这个ExecutorService需要支持高并发。
在Okhttp的Dispathcer可以看到几个属性分别是:
1. maxRequests =64 //最大并发数
2. maxRequestsPerHost =5 //最大同时请求主机数
3. executorService //执行者服务,用于控制请求的生命周期
4. readyAsyncCalls //异步等待队列
5. runningAsyncCalls //异步执行队列,加入后可以立即执行
6.runningSyncCalls //同步执行队列
在学习笔记(一)中,已经提到,当call.enqueue的时候会通过这个dispatcher来调度线程
还可以通过dispatcher来
enqueue //执行runningAsyncCalls队列中的call
cancelAll //取消所有call
promoteCalls //将等待队列中的call加入到执行队列中
finished //请求已经完成时调用,调用这个方法时会判断 是否还有call未执行,如果存在就执行promoteCalls()方法,如果所有请求都完成就执行回调
还可以查看当前等待/执行队列中的情况
所以这个dispatcher会根据不同情况把call加入到不同到不同到队列中,并且通过excuteservice管理call