In 4D 19 R6 abbiamo introdotto le classi HTTP per modernizzare la sintassi e migliorare le funzionalità dei nostri comandi client HTTP. Partendo da questa base, 4D 20 R6 introduce una nuova potente funzionalità: Gli agenti HTTP. Questi agenti consentono agli sviluppatori di personalizzare e ottimizzare le connessioni ai server HTTP, gestendo la persistenza e il riutilizzo delle connessioni per le richieste HTTP.
HDI Gestione delle richieste HTTP con gli agenti HTTP
Capire gli agenti HTTP
Se dovete eseguire più richieste allo stesso server HTTP, potreste volerle ottimizzare sia per il client che per il server. Un modo comune per farlo è mantenere una singola connessione per tutte le richieste, in modo da non dover negoziare una nuova connessione tra una richiesta e l’altra, soprattutto se protetta. A questo punto entrano in gioco gli agenti, che gestiscono il riutilizzo delle connessioni per ottimizzare le richieste.
Prima di tutto, è importante sapere che anche se non si cambia nulla nel codice, si beneficerà degli agenti: tutti i HTTPRequests useranno un agente predefinito, se non ne viene fornito uno. Questo agente gestirà la persistenza delle connessioni attraverso un semplice meccanismo di keep-alive, in modo che quando si inviano più richieste allo stesso server, si riutilizzino le connessioni, se possibile, invece di crearne una nuova per ogni richiesta.
Questo agente predefinito è il più semplice che si possa immaginare, ma si può (e si deve) creare un proprio agente. Gli agenti possono permettere di perfezionare le connessioni, dando il controllo sul meccanismo di keep-alive, consentendo di scegliere il numero massimo di connessioni contemporanee a un server specifico, aggiungendo timeout per evitare di mantenere le connessioni all’infinito o persino configurando le connessioni TLS/SSL a livello di agente, invece di farlo per ogni richiesta HTTPRequest.
L’uso di un agente per HTTPRequest è estremamente semplice; basta usare questo pezzo di codice:
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)
Suggerimento 1
HTTPAgent è un oggetto condiviso. Di conseguenza, è possibile aggiungerne uno a una classe singleton per utilizzare lo stesso agente per tutte le richieste allo stesso server.
Suggerimento 2
È possibile richiedere più server utilizzando lo stesso agente. In questo caso, ogni server avrà il proprio pool di connessioni che utilizzano le stesse opzioni dell’agente.
Con gli agenti, le classi HTTP coprono ora tutte le funzionalità dei comandi HTTP e anche di più, quindi è un buon momento per passare completamente a questa nuova sintassi. Se avete domande sulle classi HTTP o sugli agenti in particolare, non esitate a scriverle sul forum di 4D.