Вопрос

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

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

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

Спасибо,

Это было полезно?

Решение

После выполнения одного метода, давайте скажем, Get, вы можете прочитать ответный номер httpstatus, чтобы решить, нужно ли назвать метод.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#connection_release

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

httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top