Como forçar a desconexão no Commons-HttpClient?
-
25-09-2019 - |
Pergunta
Eu uso o Commons-HttpClient para enviar consultas para um servidor da Web. O servidor da Web nunca fecha as conexões, mas possui um pequeno vazamento de memória associado ao contexto de conexão.
Portanto, gostaria de fechar as conexões persistentes de tempos em tempos (todas as consultas X, por exemplo), mas não encontrei nenhuma maneira de fazer isso. Eu uso o MultithReadedHttpConnectionManager
Eu poderia usar o MultithreadEdHttpConnectionManager.closeidleConnections (muito_small_delay), mas isso não é muito confiável: se meu código Java tem muito trabalho a fazer, é possível que nenhuma conexão esteja ociosa, porque sempre há outros threads esperando uma conexão gratuita.
Obrigado,
Solução
Depois de executar um método, digamos, você pode ler o número HTTPSTATUS de responsabilidade, para decidir se um método.ReleasEConnection () precisa ser chamado.
Ou se você souber qual conexão você quer fechar, você pode tentar
MultiThreadedHTTPConnectionManager
void releaseConnection(HttpConnection conn)
Ok, eu pensei que você tem algum motivo para que você queira 'matar' uma conexão. Suponha que você tenha a conexão, o objeto HttpConnection, que deseja fechar na mão. Este método pode ajudar?
HttpConnection
public void close()
Closes the socket and streams.
Outras dicas
Você está ligando method.releaseConnection()
?
http://hc.apache.org/httpclient-3.x/threading.html#connection_release
Você pode se dar ao luxo de usar SimpleHttpConnectionManager(boolean alwaysClose)
?
httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))
Quando estou usando releaseConnections()
Ainda existem conexões em CLOSE_WAIT
Estado. Tudo bem se eu acrescentar closeIdleConnections(0)
depois releaseConnections
?
Isso significa que, mesmo que a conexão seja enviada de volta à piscina para ser usada por outros clientes, mas não estiver fechada/liberada então closeIdleConnections
vai fechar isso?