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
Le novità di Angular: i miglioramenti alla CLI
Generare velocemente pagine CRUD in Blazor con QuickGrid
Migrare una service connection a workload identity federation in Azure DevOps
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Inizializzare i container in Azure Container Apps
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Creazione di componenti personalizzati in React.js con Tailwind CSS
Utilizzare Azure AI Studio per testare i modelli AI
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Sfruttare MQTT in cloud e in edge con Azure Event Grid
I più letti di oggi
- Operazioni di selezione su una DataTable
- annunciato #windowsazure pack: consente di far girare su #windowsserver 2012 e system center on premise i servizi di azure! #msteched
- Aggiungere servizi esterni al ciclo di vita di un'applicazione Silverlight 4.0
- Inviare notifiche toast da background agent con Windows Phone 7.1