Gestione delle richieste HTTP con gli agenti HTTP

Tradotto automaticamente da Deepl

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.

Nicolas Brachfogel
- Proprietario del prodotto e sviluppatore senior - Nicolas Brachfogel è entrato in 4D nel 2017 come Senior Developer (4D Server e networking). In qualità di Product Owner per gestire il rilascio di Apple Silicon, si occupa di scrivere le storie degli utenti e di tradurle in specifiche funzionali, nonché di assicurarsi che le implementazioni delle funzionalità soddisfino le esigenze dei clienti. Diplomato all'Institut Supérieur d'Informatique Appliquée (INSIA), Nicolas ha iniziato la sua carriera come sviluppatore di software nel 2001. Dopo diversi anni di codifica in Java e C++, si è specializzato nello sviluppo di client-server per aziende di videogiochi. Come sviluppatore/architetto di server, ha lavorato con successo alle architetture server di molti giochi (Dofus Arena, Drakerz, Trivial Pursuit Go!).