Постоянное соединение Apache HttpClient 4 на прокси вместо маршрута

Насколько я понимаю, все реализации ClientConnectionManager сохраняют соединения на основе маршрута. Это приводит к практически отсутствию постоянных соединений, если задействован прокси. Например, HttpClient должен посетить 1000 различных доменов через HTTP-прокси с фиксированным IP-адресом, он должен установить не менее 1000 подключений к прокси-серверу вместо создания 1 постоянного подключения к прокси-серверу и повторного использования его для 1000 запросов.

Я имитирую несколько пользователей, посещающих тысячи доменов (поддельные домены, все DNS разрешаются на пару IP-адресов, разрешение происходит после прокси-сервера, поэтому HttpClient не имеет ничего общего). Вышеупомянутое поведение быстро использует все доступные порты на локальном хосте, поскольку я увеличиваю количество пользователей и доменов, в результате возникают ошибки привязки адреса.

Есть ли способ заставить HttpClient сохранять соединение на основе прокси? т.е. HttpClient поддерживает только определенное количество подключений к данному прокси.


person user1830927    schedule 16.11.2012    source источник


Ответы (1)


После интенсивных исследований выяснилось, что Apache HttpClient не поддерживает такое поведение «из коробки». Мне нужно изменить источник HttpClient/HttpCore, чтобы иметь эту функцию, т.е. поддерживать постоянные соединения только на основе адреса localAddress и первого прокси-сервера.

Классы, которые я изменил:

org.apache.http.conn.routing.HttpRounte.java и org.apache.http.conn.routing.BasicRouteDirector.java.

В основном я изменил hashCode и метод equal в HttpRoute (который используется в качестве ключа к хеш-таблице для постоянного поиска соединений), поэтому поиск не учитывает целевой адрес, если задействован прокси.

Первоначальные результаты тестирования вышеуказанной модификации показывают примерно 100-кратное улучшение пропускной способности запросов в моем сценарии. Пока это работает нормально для меня.

Кевин

person user1830927    schedule 21.11.2012