#retrofit #retrofit2 #okhttp
#retrofit #retrofit2 #okhttp
Вопрос:
Я использую RxJavaCallAdapterFactory.create() и Schedulers.io (), поэтому диспетчер не используется, а maxRequests и maxRequestsPerHost не являются проблемой. Schedulers.io () создает бесконечное количество потоков.
Проблема в том, что когда я запускаю 10 запросов, а затем еще 1, в то время как предыдущий не завершен, запуск этого 1 запроса занимает больше времени. Если 10 запросов завершены, следующий запрос выполняется немедленно. Когда у меня выполняется несколько запросов, я вижу в журналах, что вызывается Call.execute(), а затем запрос запускается только через 6 секунд. При отсутствии активных запросов немедленно запускается новый запрос. Так это ограничение Android или некоторых сетевых библиотек?
Ответ №1:
Используйте диспетчер OkHttp.
Dispatcher dispatcher = new Dispatcher(Executors.newFixedThreadPool(20));
dispatcher.setMaxRequests(20);
dispatcher.setMaxRequestsPerHost(1);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.dispatcher(dispatcher)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(HttpUrl.get("https://example.com/"))
.client(okHttpClient)
.build();
Ответ №2:
Да, настройте это в диспетчере OkHttp.