A tempo perso sto continuando a indagare il mondo del reverse AJAX (o Comet che dir si voglia) visto che mi sembra una tecnica grandiosa e stranamente non molto conosciuta (se confrontata con AJAX “classico”).
E visto che sono terribilemente infatuato di Mootools sono partitio dal modulo di Ben Hutchins , di cui ho anche scritto un paio di post fa, moo-comet.
Tuttavia moo-comet soffre di vari problemini, riconosciuti dallo stesso Ben, primo tra i quali l’immenso uso di cpu richiesto.

Spulciando il lavoro di Ben ho però trovato una sua evoluzione del pattern Comet, Realtime AJAX che riduce decisamente il tempo di cpu utilizzato dallo script.
Il funzionamento è molto semplice ed è una soluzione a cui avevo pensato anch’io prima di scoprire il lavoro di Ben: il Realtime AJAX.
Su google code, lo stesso Ben, sintetizza molto bene il concetto:

Realtime Ajax works like this. The client requests the server, which will then check for an update, if there is one you output it right away. If there is no update, the server runs a loop for 30 seconds, every few seconds you can look for an update on the server side and if there are some you will output the update, then exit the script, if there where no updates after the 30 seconds you simply say so by exiting with ‘nothing’. On the user side, the client opens a connection to the server like so, and after the request is finished we check to see if there is an update or if it was ‘nothing’. If there was an update, we process the event, then we start a new request to the server, also telling the server we just handled the last update. If there was an issue, the user will simply request the the last update by not telling the server it handled the last update. The server then upon the new connection will simply delete the update if it was successful from the update-queue, and if it wasn’t it resends the same update.

By doing this we prevent data loss, stay away from persistent connections preventing cpu issues.

Sono quindi passato ad una prima fase di test e le prime conclusioni sono:

  • Il consumo di cpu è effettivamente abbattuto
  • Funzionamento corretto su FF3 e su Opera
  • Funzionamento semi-corretto su Chrome, eccezion fatta per il solito problema del puntatore che resta bloccato in modalità di caricamento (una cosa subdola e odiosa -.-)
  • Funzionamento corretto su IE8 per la prima manciata di richieste! Ecco questa è statauna sorpresa su cui devo assolutamente indagare. Mi spiego meglio: lo script di prova proposto da Ben sputa fuori un codice esadecimale casuale ogni tot secondi. ebbene su IE8 dopo i primi 5/6 codici diversi ne vengono fuori una decina uguali, poi di nuovo 5/6 diversi e poi di nuovo un’altra decina tutti uguali! Spero sia un problema con la paginetta di test che ho preparato (stamattina ancora mezzo addormentato) altrimenti proprio non so da che cosa possa essere causato…

Detto ciò (e dopo aver doverosamnte bestemmiato IE) allego un po’ di file per chi voglia a sua volta testare la cosa.
ra.zip