提高okhttp3异步请求的并发连接数
在okhttp3中,异步发起HTTP请求是通过Call.enqueue(Callback responseCallback)方法完成的。在Call的实现类RealCall中,操作被委托给Dispatcher.execute()方法。方法定义如下:
synchronized void enqueue(AsyncCall call) {if (runningAsyncCalls.size() < maxRequests && runningCallsForHost(call) < maxRequestsPerHost) {
runningAsyncCalls.add(call);
executorService().execute(call);
} else {
readyAsyncCalls.add(call);
}
}
可以看到,异步请求是否立即执行,受到maxRequest、maxRequestsPerHost和executorService三个因素的制约。maxRequests和maxRequestsPerHost的默认值分别是64和5,而executorService定义为
executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60, TimeUnit.SECONDS,new SynchronousQueue<Runnable>(), Util.threadFactory("OkHttp Dispatcher", false));
因此我们只需要关注maxRequests和maxRequestsPerHost。这两个参数可以通过下列方法设置。
public synchronized void setMaxRequestsPerHost(int maxRequestsPerHost);public synchronized void setMaxRequests(int maxRequests);
而OkHttpClient使用的Dispatcher可以在Builder中设置。
public Builder dispatcher(Dispatcher dispatcher) {if (dispatcher == null) throw new IllegalArgumentException("dispatcher == null");
this.dispatcher = dispatcher;
return this;
}
根据上述方法就可以调整okhttp的并发连接数了。
以上是 提高okhttp3异步请求的并发连接数 的全部内容, 来源链接: utcz.com/z/517330.html