En 4D 19 R6, introdujimos las clases HTTP para modernizar la sintaxis y mejorar las funcionalidades de nuestros comandos cliente HTTP. Sobre esta base, 4D 20 R6 aporta una nueva y poderosa funcionalidad: Agentes HTTP. Estos agentes permiten a los desarrolladores personalizar y optimizar sus conexiones a servidores HTTP mediante la gestión de la persistencia y reutilización de conexiones para peticiones HTTP.
HDI Gestión de peticiones HTTP con agentes HTTP
Entendiendo los Agentes HTTP
Si tiene que realizar varias peticiones al mismo servidor HTTP, es posible que desee optimizarlas tanto para el cliente como para el servidor. Una forma común de hacerlo es mantener una única conexión para todas las peticiones, de forma que no tenga que negociar una nueva conexión entre peticiones, especialmente una segura. Ahí es cuando entran en juego los agentes, que se encargan de reutilizar las conexiones para optimizar las peticiones.
En primer lugar, es importante saber que incluso si no cambia nada en su código, se beneficiará de los agentes: todas sus HTTPRequests utilizarán un agente por defecto si no suministra uno. Este agente gestionará la persistencia de sus conexiones a través de un sencillo mecanismo keep-alive, de modo que cuando envíe múltiples peticiones al mismo servidor, reutilizará las conexiones si es posible en lugar de crear una nueva para cada petición.
Este agente por defecto es el más simple que pueda imaginar, pero puede (y debe) querer crear su propio agente. Los agentes pueden permitirte afinar sus conexiones, dándole control sobre el mecanismo keep-alive, permitiéndole elegir el número máximo de conexiones concurrentes a un servidor específico, añadiendo timeouts para evitar mantener conexiones indefinidamente o incluso configurando sus conexiones TLS/SSL a nivel de agente en lugar de hacerlo para cada HTTPRequest.
Usar un agente para HTTPRequest es extremadamente fácil; sólo tiene que usar este código:
var $requestOptions:={/*here you put the agent options*/}
var $myAgent:=4D.HTTPAgent.new($requestOptions)
var $requestOptions:={}
$requestOptions.agent:=$myAgent
var $myRequest:=4D.HTTPRequest.new("www.4D.com"; $requestOptions)
Consejo 1
HTTPAgent es un objeto compartido. En consecuencia, puede añadir uno a una clase singleton para utilizar el mismo agente para todas sus peticiones al mismo servidor.
Sugerencia 2
Puede solicitar múltiples servidores utilizando el mismo agente. En ese caso, cada servidor tendrá su propio pool de conexiones utilizando las mismas opciones de agente.
Con los agentes, las clases HTTP cubren ahora todas las funcionalidades de los comandos HTTP e incluso más, por lo que es un buen momento para cambiar completamente a esta nueva sintaxis. Si tiene alguna pregunta sobre las clases HTTP o los agentes específicamente, no dude en publicarla en el foro de 4D.