Apache HttpClient 4.3 – configuración de conexión de tiempo de espera de inactividad

¿Cuál es el camino más corto para configurar la conexión de tiempo de espera de inactividad en Apache HttpClient 4.3 versión?

He mirado en la documentación y no pudo encontrar nada. Mi objetivo es reducir las conexiones abiertas a un mínimo de post servidor-pico.

por ejemplo, en el Embarcadero del Cliente 8.x puede establecer httpClient.setIdleTimeout: http://download.eclipse.org/jetty/stable-8/apidocs/org/eclipse/jetty/client/HttpClient.html#setIdleTimeout(long)

OriginalEl autor YaOg | 2014-01-20

2 respuestas

  1. 30

    El tiempo de espera se establece en el RequestConfig así que usted puede establecer el valor predeterminado cuando la HttpClientBuilder se llama.

    Por ejemplo, suponiendo que el tiempo de espera de la variable en cuestión de segundos a crear su costumbre RequestConfig se podría hacer algo como esto:

    RequestConfig config = RequestConfig.custom()
        .setSocketTimeout(timeout * 1000)
        .setConnectTimeout(timeout * 1000)
        .build();

    Entonces, usted puede construir su HttpClient establecer el valor predeterminado RequestConfig como este:

    HttpClients.custom()
        .setDefaultRequestConfig(config);
    Eso no es lo que estoy buscando. El de arriba es readTimeout y connectTimeout. Estoy tratando de averiguar cómo establecer el “desalojo” de la política en las conexiones abiertas. Considere la posibilidad de un pico donde se llega a 1000 conexiones por dirección. ¿Cómo indicar a Apache cliente para cerrar las conexiones inactivas después de X segundos?
    Usted tal vez debería mirar setKeepAliveStrategy() al generar el HttpClient y aplicar un ConnectionKeepAliveStrategy de la interfaz. Que le dice al cliente el tiempo que la conexión puede estar inactiva antes de ser reutilizados.
    Esta respuesta es errónea. setConnectTimeout establece el tiempo de espera para la conexión con el servidor. setSocketTimeout establecer el tiempo de espera durante una operación de lectura. El OP estaba preguntando acerca del tiempo de espera de inactividad.

    OriginalEl autor Brett

  2. 9

    Que no puede establecer un tiempo de espera de conexión inactiva en la config de Apache HTTP de Cliente. La razón es que hay una sobrecarga de rendimiento en hacerlo.

    La documentación que se indica claramente por qué, y da un ejemplo de una conexión inactiva supervisar la aplicación puede copiar. Esencialmente, este es otro hilo que se ejecuta periódicamente llamada closeIdleConnections en HttpClientConnectionManager

    http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

    Una de las principales deficiencias de los clásicos de bloqueo de e/S modelo es que el socket de red puede reaccionar a los eventos de e/S sólo cuando está bloqueado en una operación de e/S. Cuando una conexión es lanzado de nuevo al administrador, que puede ser mantenido con vida sin embargo no es capaz de monitorear el estado del socket y reaccionar a los eventos de e/S. Si la conexión se cierra en el lado del servidor, el cliente de conexión es incapaz de detectar el cambio en el estado de conexión (y reaccionar de manera adecuada por el cierre de la toma en el extremo).
    HttpClient intenta mitigar el problema, probando si la conexión es ‘rancio’, que ya no es válido porque fue cerrado en el lado del servidor, antes de usar la conexión para la ejecución de una solicitud HTTP. La añeja comprobación de la conexión no es 100% confiable y agrega 10 a 30 ms sobrecarga para cada ejecución de la solicitud. La única solución viable que no implica un hilo por cada socket modelo de conexiones inactivas se dedicó un monitor de hilo utilizado para desalojar a las conexiones que se considera caducado debido a un largo período de inactividad. El monitor hilo periódicamente se puede llamar ClientConnectionManager#closeExpiredConnections() método para cerrar todos los expirado conexiones y desalojar a las conexiones cerradas de la piscina. Puede opcionalmente, también llamada ClientConnectionManager#closeIdleConnections() método para cerrar todas las conexiones que han sido inactivo durante un período de tiempo dado.

    OriginalEl autor jasop

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *