提高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

回到顶部