Reverse Ajax (aka Comet)
Cavolo non si finisce proprio mai di imparare! Certo mi fa sempre un po’ strano scervellarmi per trovare una soluzione a un problema e poi scoprire che sto cercando di reinventare l’acqua calda e che la risposta era già pronta e disponibile su internet. Molti diranno: bhe ma prima di impazzire a fare qualcosa la prima mossa è cercarla su google! e io vi rispondo: brà! ma bisogna anche sapere cosa cercare su google -.-’ !!
Cmq andando con ordine… alcuni giorni fa mi è stata commissionata un’applicazione web che tra le altre cose deve implenetare una sorta di piccola chat sullo stile di quella presente su facebook. La prima cosa che mi è venita in mente ( e che in verità avevo già implementato tempo fa ) è stata una serie di chiamate Ajax in background ogni tot millisecondi al server per controllare se un nuovo messaggio è stato inviato. Ma poi ho pensato che schifezza, questa cosa l’ho già fatta… un metodo migliore dev’esserci per forza!
La soluzione sarebbe stata mantere una connessione aperta col server e fare in modo che sia questo ad inviare i nuovi messaggi quando diventano disponibili… ma, mumble mumble, per fare una cosa del genere avrei bisogno di un socket e non ho la possibilità di usare java sul server, potrei usare un socket php, ma ho fatto delle prove, non funziona proprio come vorrei, il multithreading, come fare , come fare… ???
E qui ravanando su google (perchè su google alle volte è necessario ravanare!) ho trovato una grande cosa: Reverse Ajax a.k.a. Comet (Comet come Ajax è anch’esso un detersivo poi a quanto mi è sembrato di capire: il senso dell’umorismo di questi ingegneri web è tra il geniale e il demenziale cavolo
).
Ad ogni modo il paradigma Comet è stato partorito nientemeno che nel 1996 e io non ne avevo mai sentito parlare: Shame on Me!
La cosa funziona , tra l’altro anche in modo molto semplice: praticamente il server non chiude la connessione con il browser, ma la mantiene aperta a tempo inderminato e i controlli sulla presenza di nuovi dati avviene quindi sul server e non ad opera di continue interrogazioni (spesso inutili) da parte del browser.

L’immagine rubata da google image rende abbastanza bene l’idea…
Lo step successivo è stato trovarne un’implementazione da cui studiarne il funzionamento e visto che ovviamente è una tecnologia javascript-based come Ajax trovarne un’implementazione basata su Mootools il mio framework preferito.
E qui google mi è venuto incontro con lo script di Benjamin Hutchins presente su google code
L’ho quindi subito testato (5 minuti fa) è le prime impressioni sono state:
- Funziona su IE8
- Funziona su Firefox 3.6
- Funziona anche su Chrome solo che questo stupido browser (scusa BigG ma quando ci vuole ci vuole!) visto che la connessione non viene terminata mantiene tutto il tempo il cerchietto rotante vicino al puntatore del mouse, e questo non va bene
- Lo script di esempio di Benjamin contiene un piccolo e insignificante errore che ho provveduto subito a corregere (allego a fondo pagina lo zip corretto)
- Alla prima esecuzione su FF il consumo di CPU è schizzato alle stelle, ma solo la prima volta quindi la cosa va approfondita
In conclusione:
- W Ajax
- W Comet
- W Benjamin Hutchins
- W Mootools
- W google
- e perchè no… W anche me XD

квадроциклы on 15 giu 2010 at 15:34 #
Its very important