我需要在 Android 中使用 Retrofit 尽快发出 50 个 http GET 请求。我正在使用带有 OkHttp 的 Retrofit。目前,Retrofit 与纯 Java ThreadPoolExecutor
和 HttpUrlConnection
相比表现不佳:对于所有 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);
关于java - 如何使用 Retrofit/OkHttp 使并发请求更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41960386/