Полезные факты о библиотеке OkHttp.
1) OkHttpClient достаточно тяжелый объект, содержащий в себе пул HTTP соединений и очередь запросов, поэтому хорошей практикой будет инициализировать такой объект лениво и хранить в долгоживущем месте, например в Application классе.
2) По умолчанию пул HTTP соединений ограничен до 5, а максимальное время простаивания соединения составляет 5 минут. В большинстве случаев этого хватает, а для специфичных кейсов вы всегда можете заменить стандартный пул на свой методом OkHttpClient.Builder.connectionPool().
3) OkHttp поддерживает два основных протокола: HTTP/1.1 и HTTP/2, второй позволяет выполнять запросы параллельно на одном соединении: в таком случае пул редко будет превышать более одного активного соединения.
4) Для установки соединения OkHttp использует java.net.Socket, который оборачивается в javax.net.ssl.SSLSocket, если веб-сервер поддерживает защищенное соединение (https), что сейчас является де-факто стандартом.
5) Управлением очередью запросов занимается Dispatcher. Он отвечает за отмену и выполнение запросов на пуле потоков, по умолчанию пул не ограничен и новые потоки создаются по требованию, если нет свободных. Вы можете задать свой Dispatcher и настроить такие параметры как: maxRequests, maxRequestsPerHost и executorService.
6) Выполнение запроса в OkHttp эквивалентно проходу по цепочке обязанностей, состоящей из Interceptor'ов. Библиотека имеет несколько своих Interceptor'ов, которые отвечают за редиректы, кэширование, установку соединения и чтение данных, также вы можете добавить свои с помощью методов addInterceptor (Application Interceptor) и addNetworkInterceptor (Network Interceptor).
Главное отличие Application Interceptor'ов заключается в том, что они добавляются раньше основных Interceptor'ов OkHttp, поэтому им недоступно текущее соединение и они не могут отследить такие штуки, как редиректы или повторная установка упавшего соединения в отличии от Network Interceptor'ов, которые перехватывают гораздо больше данных.
Post #22
845

- ❤ 13
- 👍 1
- 🔥 1
- 🤝 1