java - 如何使用 Retrofit/OkHttp 使并发请求更快?

标签 java android http retrofit okhttp

我需要在 Android 中使用 Retrofit 尽快发出 50 个 http GET 请求。我正在使用带有 OkHttp 的 Retrofit。目前,Retrofit 与纯 Java ThreadPoolExecutorHttpUrlConnection 相比表现不佳:对于所有 50 个请求,Retrofit 大约需要 50 秒,普通 HttpUrlConnection 大约需要 30 秒,如果我为 ThreadPoolExecutor 设置了池大小 20,为 Retrofit/OkHttp 我设置了 okHttpClient.dispatcher().setMaxRequests(20);

如果我查看 logcat,无论我在 setMaxRequests() 中设置什么,我都可以看到 Retrofit 正在执行最多 5 个并发请求,而使用 ThreadPoolExecutor 时有很多并发请求,因为有可用的工作线程。

我能做些什么来加快 Retrofit 的速度吗?我不想切换到 HttpUrlConnection,因为 Retrofit 非常优雅且易于使用。

编辑1

我尝试为 OkHttp 提供自定义 ThreadPoolExecutor 但没有时间改进:

OkHttpClient.Builder builder = new OkHttpClient.Builder();
ExecutorService exec = new ThreadPoolExecutor(20, 20, 1, TimeUnit.HOURS, new LinkedBlockingQueue<>());
Dispatcher d = new Dispatcher(exec);
builder.dispatcher(d);
OkHttpClient okHttpClient = builder.build();
okHttpClient.dispatcher().setMaxRequests(20);

编辑2

如果这很重要,我会向同一个端点发出所有请求

最佳答案

因为他们都去同一个主机,你有没有试过:

okHttpClient.dispatcher().setMaxRequestsPerHost(20);

Dispatcher.setMaxRequestsPerHost

关于java - 如何使用 Retrofit/OkHttp 使并发请求更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41960386/

相关文章:

java - JScrollPane.getViewportBorderBounds() 和 JScrollPane.getViewport() 之间的区别

java - IntelliJ 结构搜索正则表达式问题

java - 有什么方法可以预测 session 超时吗?

android - 适用于超大型平板电脑的 Android Market 不支持应用程序

Java 编译器错误

Android 5 - 导航栏上的微调器下拉列表

android - <ConstraintLayout/> 中 <TextView/> 下方的边距不起作用

ios - 使用 TableView 进行 NSData 卸载

http - Opera 在加载资源时挂起

node.js - Node 'request' 模块 : Getting hold of the last response in a 302-redirect