Конфигурирование HttpClient для использования как клиент Restlet

Я застреваю, настраивая Restlet для моего клиентского кода. Я использую Restlet 2 и HttpClient 4. Я добавил дополнительную банку и банки HttpClient к пути сборки, и это, кажется, работает.

Однако я не знаю, как настроить его подробно. Я не создаю клиента вручную, вместо этого я использую ClientResources для взаимодействий, который является единственной частью, где я использую Restlet непосредственно. Конкретное инстанцирование клиентов, кажется, скрыто в реализации платформы. Я нашел некоторые подсказки, как я мог бы настроить клиенты, но они все были записаны для Restlet 1.x.

Подробно, я хочу настроить следующие части:

  • Измените Агент пользователя для клиентских запросов. clientResource.getClientInfo().setAgent(…) не работает.
  • Увеличьте число параллельных соединений на хост.
  • Включите постоянные соединения и объединяющий на хост. Очевидно, Restlet до сих пор создает новое соединение на ClientResource, который не действительно эффективен.

Конечно, я уже взглянул на HttpClientHelper, но я не знаю, где и как добавить это. Уже искавший документация это, но никакие хиты.

Спасибо за справку!

5
задан b_erb 18 July 2010 в 11:15
поделиться

1 ответ

Во-первых, чтобы убедиться, что Restlet использует Apache HttpClient для соединений, вам необходимо иметь org.restlet.ext.httpclient.jar в пути к классам. Во-вторых, вы передаете Контекст в конструктор вашего ClientResource ? В противном случае вам потребуется:

    final Context context = new Context();
    context.getParameters().set("maxConnectionsPerHost", "20");

    final ClientResource requestResource = new ClientResource(context, "http://localhost:8182/request");
    requestResource.getClientInfo().setAgent("Example-Client/1.0");

Это позаботится об интересующей вас настройке maxConnectionsPerHost . Кроме того, вызов setAgent работал, как и ожидалось, для меня. Я не уверен, в чем может быть проблема в вашем случае.

Что касается постоянных подключений, похоже, HttpClient позаботится об этом за вас. Restlet использует HttpClient ThreadSafeClientConnManager , описанный здесь . По этой ссылке упоминается поддержка постоянных подключений. Кажется, что этот объект также позаботится о ваших проблемах с объединением. Вы можете повторно использовать тот же экземпляр ClientResource , чтобы воспользоваться этим. Мне не сразу известно о политике безопасности потоков ClientResource , но я надеюсь, что она безопасна для потоков.

4
ответ дан 15 December 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: