Em 4D 19 R6, introduzimos classes HTTP para modernizar a sintaxe e melhorar as funcionalidades para nossos comandos de cliente HTTP. Construindo sobre essa base, 4D 20 R6 traz uma nova e poderosa caraterística: Agentes HTTP. Esses agentes capacitam os desenvolvedores a personalizar e otimizar suas conexões com servidores HTTP gerenciando a persistência de conexão e reutilização para pedidos HTTP.
HDI Gerenciando Pedidos HTTP com Agentes HTTP
Entendendo os agentes HTTP
Se você tiver que executar várias solicitações para o mesmo servidor HTTP, talvez queira otimizá-las tanto para o cliente quanto para o servidor. Uma maneira comum de fazer isso é manter uma única conexão para todas as solicitações, para que não seja necessário negociar uma nova conexão entre as solicitações, especialmente uma conexão segura. É aí que os agentes entram em ação, pois eles lidam com a reutilização de conexões para otimizar suas solicitações.
Antes de mais nada, é importante saber que, mesmo que não altere nada no seu código, beneficiará dos agentes: todos os seus HTTPRequests utilizarão um agente predefinido se não fornecer um. Este agente irá gerir a persistência das suas ligações através de um mecanismo simples de “keep-alive”, por isso, quando enviar vários pedidos para o mesmo servidor, irá reutilizar as ligações, se possível, em vez de criar uma nova para cada pedido.
Este agente predefinido é o mais simples que pode imaginar, mas pode (e deve) querer criar o seu próprio agente. Os agentes podem permitir-lhe afinar as suas ligações, dando-lhe controle sobre o mecanismo keep-alive, permitindo-lhe escolher o número máximo de ligações simultâneas a um servidor específico, adicionando timeouts para evitar manter as ligações indefinidamente ou mesmo configurando as suas ligações TLS/SSL ao nível do agente em vez de o fazer para cada HTTPRequest.
Usar um agente para um HTTPRequest é extremamente fácil; basta usar este pedaço de 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)
Dica 1
HTTPAgent é um objeto partilhado. Consequentemente, pode adicionar um a uma classe singleton para utilizar o mesmo agente para todos os seus pedidos ao mesmo servidor.
Dica 2
Pode efetuar pedidos a vários servidores utilizando o mesmo agente. Nesse caso, cada servidor terá o seu próprio conjunto de ligações utilizando as mesmas opções de agente.
Com os agentes, as classes HTTP cobrem agora todas as funcionalidades dos comandos HTTP e ainda mais, pelo que é uma boa altura para mudar completamente para esta nova sintaxe. Se tiver quaisquer perguntas sobre classes HTTP ou agentes especificamente, não hesite em postá-las no fórum 4D.