Как заставить отключение в Commons-httpClient?
-
25-09-2019 - |
Вопрос
Я использую 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
закрою его?