La notizia che sto per segnalarvi ha stravolto le mie solide basi di programmatore web. Ero convinto che il web funzionasse in una e una sola maniera: il browser invia una richiesta HTTP al web server che risponde inviando la risposta HTTP. A dir il vero una crepa nelle mie convinzioni si era già formata alla nascita di Ajax, ma nonostante la sua natura asincrona, tutto l’impianto poteva ancora reggere.
Questa sera ho letto di un nuovo progetto su GoogleCode chiamato pi.Comet, una classe javascript che permette al server di lanciare eventi asincroni e trasferire dati in tempo reale al browser in ascolto. In altre parole ci permette di creare un’applicazione Reverse Ajax, per la precisione, un’applicazione Comet.
Chiariamo alcuni concetti. Reverse Ajax è una tecnica che combina la capacità di Ajax di inviare richieste dal client al server e un meccanismo per il quale il server riesce a inviare indietro dati al browser. I meccanismi conosciuti di Reverse Ajax sono tre:
- Comet, la connessione tra il client e il server è tenuta aperta (un response http senza termine). L’idea è di utilizzare un frame nascosto per inviare dati attraverso questo canale (forever frame). A dir il vero la tecnica si è evoluta e ora si usa l’oggetto XHR in una modalità multi-part, dove ogni parte della risposta è un comanda javascript che il browser valuta.
- Piggyback, dati aggiuntivi sono inviati nelle tradizionali comunicazioni client/server.
- Polling, si simula l’invio di eventi da parte del server, continuando a lanciare richieste dal client al server.
Il progetto pi.Comet utilizza delle 3, la tecnica più interessante ed efficace. Comet, poi, può lavorare in due maniere:
- Streaming: utilizza un’unica, persistente connessione http che è gestita incrementalmente dal browser; ogni volta che il server invia un nuovo evento, il browser lo interpreta ma nessuna delle due parti chiude la connessione
- Long Polling: utilizza una richiesta per ogni nuovo evento lanciato dal server. Il browser lancia una richiesta http via Ajax e tiene aperta la comunicazione finchè il server non invia nuovi dati. Dopo l’invio, il server chiude la connessione e il browser immediatamente ne riapre un’altra.
Queste sono solo alcune informazioni, giusto per invogliarvi ad approfondire maggiormente l’argomento. E’ possibile vedere un bel esempio di un orologio il cui avanzamento è deciso dal server. Questa sera mi si è aperta una nuova porta, un nuovo modo di poter concepire il web. Lasciatemi un po’ di tempo per inventare un’applicazione web 2.0 che sfrutti questa strabiliante e rivoluzionaria novità.