Gestión de peticiones HTTP con agentes HTTP

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.

Nicolas Brachfogel
• Propietario de producto y Desarrollador Senior - Nicolas Brachfogel se unió a 4D en 2017 como Senior Developer (4D Server y networking). Como Product Owner para gestionar el lanzamiento de Apple Silicon, está a cargo de escribir historias de usuario y traducirlas en especificaciones funcionales, así como asegurarse de que las implementaciones de las funcionalidades satisfagan las necesidades del cliente. Diplomado por el Instituto Superior de Informática Aplicada (INSIA), Nicolas comenzó su carrera como desarrollador de software en 2001. Tras varios años codificando en Java y C++, pasó a especializarse en el desarrollo cliente-servidor para empresas de videojuegos. Como desarrollador/arquitecto de servidores, trabajó con éxito en las arquitecturas de servidores de muchos juegos (Dofus Arena, Drakerz, Trivial Pursuit Go!).