Domanda

Io uso commons-HttpClient alle richieste di invio a un server Web. Il server Web non chiude mai le connessioni, ma ha una piccola perdita di memoria associata al contesto di connessione.

Vorrei quindi di chiudere le connessioni persistenti di volta in volta (ogni X query per esempio), ma non ho trovato un modo per fare questo. Io uso il MultiThreadedHTTPConnectionManager

ho potuto usare MultiThreadedHTTPConnectionManager.closeIdleConnections (very_small_delay), ma non è molto affidabile: se il mio codice Java ha molto lavoro da fare, allora è possibile che nessuna connessione è sempre inattiva, perché ci sono sempre altri thread in attesa di una connessione gratuita .

Grazie,

È stato utile?

Soluzione

dopo l'esecuzione di un metodo, diciamo GET, è possibile leggere il numero di responsed HttpStatus, per decidere se un method.releaseConnection () deve essere chiamato.

Oppure, se si sa quale connessione vi voglio chiudere, si potrebbe provare

MultiThreadedHTTPConnectionManager
void    releaseConnection(HttpConnection conn) 

va bene, ho pensato di avere qualche ragione che si desidera 'kill' una connessione. Supponete di avere la connessione, l'oggetto HttpConnection, che si desidera chiudere in mano. Che questo metodo di aiuto?

HttpConnection
public void close()

    Closes the socket and streams. 

Altri suggerimenti

Si può permettersi di utilizzare SimpleHttpConnectionManager(boolean alwaysClose)?

httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))

Quando sto usando releaseConnections() ancora ci sono collegamenti in stato CLOSE_WAIT. Va bene se aggiungo closeIdleConnections(0) dopo releaseConnections?

Sarà questo media indietro, anche se la connessione viene inviato al pool per essere utilizzato da altri clienti, ma non è chiuso / rilasciato poi closeIdleConnections lo chiuderà?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top