2017-02-17 5 views
1

Возможно ли с OkHttpClient ограничить количество прямых соединений? Итак, если достигнут лимит, не будет установлено и установлено новое соединение?OkHttpClient limit number of connections?

Мое приложение запускает много соединений в одно и то же время.

ответ

0

Вы можете попытаться настроить максимальное количество незанятых сетевых подключений, установив ConnectionPool на OkHttpClient.Builder.

int maxConnections = 5; 
int keepAliveDuration = 15000; 
ConnectionPool cp = new ConnectionPool(maxConnections, keepAliveDuration, TimeUnit.MILLISECONDS); 

new OkHttpClient.Builder() 
    .connectionPool(cp) 
    .build(); 
+0

первый аргумент maxIdleConnections. Только idleConnections будут очищены, если keepAlive истёк. Невозможно заблокировать какие-либо запросы, если достигнуто максимальное количество подключений. –

0

Количество соединений настраивается в Dispatcher, а не в ConnectionPool, что только позволяет конфигурировать неактивные соединения макс и сохранить живую функциональность.

Диспетчер позволяет настроить количество подключений хостами и максимальное количество подключений, по умолчанию - 5 на хосты и всего 64. Это может показаться низким для HTTP/1, но это нормально, если вы используете HTTP/2, поскольку несколько запросов могут быть отправлены на одно соединение.

Чтобы настроить диспетчер, выполните следующие действия:

Dispatcher dispatcher = new Dispatcher(); 
dispatcher.setMaxRequests(100); 
dispatcher.setMaxRequestsPerHost(10); 
OkHttpClient client = new OkHttpClient.Builder() 
    .dispatcher(dispatcher) 
    .build();