Benché ci siano specifiche come WebSockets o Server-Sent Events, che sono in grado di semplificare le necessità di real time di molte applicazioni, la verità è che molto spesso ci sono dei limiti legati ai client, che magari non sono in grado di supportarle.
La tecnica nota come long polling sfrutta un meccanismo molto semplice. Tradizionalmente, durante una chiamata con XMLHttpRequest, le chiamate sono fatte ad intervalli predefiniti, ad esempio ogni 10 secondi, ricevendo la risposta e poi chiudendo la connessione.
Nel caso di long polling, invece, la richieste viene inviata al server, che, però, non risponde al client fino a quando non c'è qualcosa effettivamente disponibile e da inviare, oppure dopo un certo timeout. Appena la connessione viene chiusa, il client deve riaprirla, per continuare il ciclo.
Rispetto al polling tradizionale, questa tecnica abbassa comunque la latenza, perché i messaggi vengono inviati più velocemente, minimizzando il numero di richieste effettuate dai client, perché le risposte vengono inviate in presenza di dati o dopo un timeout durante il quale gli stessi non sono arrivati.
L'immagine mostra meglio i due concetti: nella parte superiore c'è il polling tradizionale, in quella inferiore il long polling:

Per implementare questa tecnica il lavoro da effettuare è tutto lato server: occorre, infatti, implementare la logica per gestire l'invio del messaggio o, in mancanza, di un timeout che chiuda la connessione. Lato client, infatti, ci basterà continuare a lavorare come in passatto: dovremo stabilire una nuova connessione non appena quella corrente viene chiusa, il tutto sfruttando XMLHttpRequest, che è tradizionalmente utilizzato per le chiamate AJAX.
Ecco un esempio utilizzando jQuery:
(function poll(){ $.ajax({ url: "getdata.api", success: function(data){ // in data abbiamo il risultato in formato JSON // la risposta è arrivata, richiamiamo la funzione ricorsivamente grazie a complete }, dataType: "json", complete: poll, timeout: 30000 }); })();
Questa funzione partirà da sola, riceverà il messaggio (entro un timeout di 30 secondi) e poi provvederà a richiamare se stessa, in caso di completamento.
Pur non offrendo un vero real time, come altre tecniche, long polling è molto apprezzata ed utilizzata, poiché offre una compatibilità pressoché assoluta con tutti i browser disponibili e, molto spesso, viene sfruttata come meccanismo di fallback in scenari dove si vuole coprire la maggior parte dei client disponibili.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Implementare l'infinite scroll con QuickGrid in Blazor Server
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Migliorare la sicurezza dei prompt con Azure AI Studio
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Usare le navigation property in QuickGrid di Blazor
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Aggiornare a .NET 9 su Azure App Service
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Creare gruppi di client per Event Grid MQTT