Ограничивает ли Retrofit или OkHttp количество параллельных запросов?

#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.