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,

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top