Как заставить отключение в commons-httpclient?

Я использую commons-httpclient для отправки запросов на веб-сервер. Веб-сервер никогда не закрывает соединения, но имеет небольшую утечку памяти, связанную с контекстом соединения.

Поэтому я хотел бы время от времени закрывать постоянные соединения (например, каждый X-запрос), но я не нашел способа сделать это. Я использую MultiThreadedHTTPConnectionManager

Я мог бы использовать MultiThreadedHTTPConnectionManager.closeIdleConnections(very_small_delay), но это не очень надежно: если у моего Java-кода много работы, то вполне возможно, что ни одно соединение не будет бездействующим, потому что всегда есть другие потоки, ожидающие свободного соединения.

Спасибо,

4 ответа

Решение

Выполнив один метод, скажем, GET, вы можете прочитать ответный номер HttpStatus, чтобы решить, нужно ли вызывать method.releaseConnection().

Или, если вы знаете, какую связь вы хотите закрыть, вы можете попробовать

MultiThreadedHTTPConnectionManager
void    releaseConnection(HttpConnection conn) 

хорошо, я думал, у тебя есть причина, по которой ты хочешь "убить" соединение. Предположим, у вас есть соединение, объект HttpConnection, который вы хотите закрыть в руке. Может ли этот метод помочь?

HttpConnection
public void close()

    Closes the socket and streams. 

Ты звонишь method.releaseConnection()?

http://hc.apache.org/httpclient-3.x/threading.html

Когда я использую releaseConnections() еще есть связи в CLOSE_WAIT государство. Это нормально, если я добавлю closeIdleConnections(0) после releaseConnections?

Это будет означать, даже если соединение отправляется обратно в пул для использования другими клиентами, но затем не закрывается / не освобождается closeIdleConnections закроет это?

Можете ли вы позволить себе использовать SimpleHttpConnectionManager(boolean alwaysClose)?

httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))
Другие вопросы по тегам