Подтвердить что ты не робот

Как сравнить клиент Джерси-клиента и Apache HTTP Client?

Прежде всего, я не пытаюсь начать пламенную войну здесь. Я знаю Джерри достаточно хорошо, но вряд ли использовал httpclient.

Каковы основные различия между jersey-client и Apache httpclient? В каких областях лучше других? Есть ли хорошая сравнительная таблица? Какой из них лучше работает с большими файлами (скажем, 2048 МБ)?

Большое спасибо за ваши комментарии!

4b9b3361

Ответ 1

Эти две вещи, вероятно, нельзя сравнивать напрямую. Джерси - это REST-клиент с полной реализацией JAX-RS, аккуратным белым API и мощным стеке фильтров. Apache Http Client - это HTTP-клиент, который идеально подходит для управления низкоуровневыми данными, такими как тайм-ауты, сложные маршруты прокси-сервера и опрос соединений. Они действуют на разных уровнях стека протоколов. Когда вы используете Джерси, всегда есть какой-то клиентский сервер HTTP. Если явно не использовать бэкэнд, Джерси будет использовать HttpUrlConnection в качестве бэкэнда по умолчанию.

Джерси с примером поддержки HttpUrlConnection:

Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
                                     .get(ClientResponse.class);

Джерси с примером Apache Http Client:

HttpClient apacheClient = HttpClientBuilder.create().build();
Client client = new Client(new ApacheHttpClient4Handler(apacheClient,
                                                        new BasicCookieStore(),
                                                        true));
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
                                     .get(ClientResponse.class);

Обратите внимание на использование обработчика в последнем примере. Это ключевая интеграция абстракции для Джерси для включения и использования различных бэкэндов. Первый пример использует URLConnectionClientHandler глубоко под капотом.

Говоря о производительности и функциях, нет никакого смысла сравнивать Apache Http Client с Джерси. Здесь можно сравнить различные бэкэнды Джерси, так как сам Джерси - всего лишь обертывающий API. Я хотел бы выделить некоторые ключевые различия между HttpUrlConnection и Apache Http Client на основе собственного опыта:

HttpURLConnection

  • Никаких внешних зависимостей не требуется. Это может быть весьма полезно на встроенных или мобильных платформах.
  • Чрезвычайно хорошо документирована везде
  • Имеет плохо разработанный API. Реализация на основе HttpUrlConnection трудно поддерживать и расширять.
  • Многие функции настраиваются с помощью свойств JVM, некоторые из которых могут быть неконфигурируемыми во время выполнения.
  • В некоторых случаях безнадежный при обработке таймаутов. В некоторых случаях вы можете установить 10 различных свойств JVM для разных тайм-аутов и до тех пор, пока ваши соединения будут висящими навсегда в некоторых случаях.
  • Так как Gingerbread является рекомендуемым http-API для Android.

Клиент Apache Http

  • Для версий 3.X эта производительность была несколько похожа на HttpUrlConnection. Версия 4.1 содержит множество улучшений производительности и работает намного лучше, чем ее копия
  • Достаточно хорошо справляется с подключением и таймаутами чтения данных.
  • Этот проект следует Open/Closed Principle, поэтому вы можете настроить практически любую часть обработки HTTP с помощью своей собственной реализации. Примеры: стратегии перенаправления, стратегии повтора, пользовательские хранилища файлов cookie, перехватчики для запросов/ответов и т.д.
  • Обеспечивает расширенную поддержку прокси с настраиваемыми сборщиками маршрутов для сложных многопроцессорных путей.
  • Убирает пул соединений для каждого маршрута. Это может дать хорошее преимущество в производительности, если используется протокол SSL/TLS, особенно если у него есть токены с использованием PKCS # 11. HttpUrlConnection также имеет внутренний пул, но у вас нет инструментов для настройки того, что или когда для объединения, никаких средств мониторинга для проверки состояния пула.
  • Особенности подробного ведения журнала

Имейте в виду, что также возможно использовать другие серверы (например, для неблокирующих клиентов) с Джерси, если у вас есть соответствующая реализация com.sun.jersey.api.client.ClientHandler.