Cómo forzar la desconexión de los Comunes-httpclient?
-
25-09-2019 - |
Pregunta
Yo uso Commons-httpclient a las preguntas Enviar a un servidor Web. El servidor Web no cierra las conexiones, pero tiene una pequeña pérdida de memoria asociada con el contexto de conexión.
Por lo tanto, al igual que lo haría para cerrar las conexiones persistentes de vez en cuando (cada X consultas, por ejemplo), pero no he encontrado ninguna manera de hacer esto. Yo uso el MultiThreadedHTTPConnectionManager
Yo podría utilizar MultiThreadedHTTPConnectionManager.closeIdleConnections (very_small_delay), pero eso no es muy fiable: si mi código Java tiene mucho trabajo por hacer, entonces es posible que no haya una conexión nunca ociosa, porque siempre hay otros subprocesos en espera para una conexión libre .
Gracias,
Solución
después de ejecutar un método, digamos GET, se puede leer el número responsed httpStatus, para decidir si un method.releaseConnection () necesita ser llamado.
O si usted sabe qué conexión que quiero cerrar, podría intentar
MultiThreadedHTTPConnectionManager
void releaseConnection(HttpConnection conn)
bien, pensé que usted tiene alguna razón que desea 'matar' una conexión. Suponga que tiene la conexión, el objeto HttpConnection, que desea cerrar en la mano. Que este método ayuda?
HttpConnection
public void close()
Closes the socket and streams.
Otros consejos
¿Está llamando method.releaseConnection()
?
http://hc.apache.org/httpclient-3 .x / threading.html # Connection_Release
Puede permitirse el uso SimpleHttpConnectionManager(boolean alwaysClose)
?
httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))
Cuando estoy usando releaseConnections()
todavía hay conexiones en el estado de CLOSE_WAIT
. ¿Está bien si agrego closeIdleConnections(0)
después releaseConnections
?
¿Esto significa volver incluso si se envía la conexión a la piscina para ser utilizado por otros clientes, pero no está cerrado / libera entonces closeIdleConnections
lo cerrará?