Pushlet: Un modo semplice per un semplice server push

Chi sta seguendo da vicino l’evoluzione che è nata intorno al web da quando è stato introdotto AJAX avrà forse sentito parlare di COMET. Questa tecnologia è basata sull’HTTP Streaming, metodologia utilizzata solitamente dai plugin multimediale per l’invio in streaming di contenuti audio video. A differenza di una semplice richiesta HTTP la connessione non viene aperta e chiusa ogni volta che avviene, ma viene semplicemente aperta una prima volta per poi essere lasciata sempre aperta in modo da permettere un transito continuo di dati senza dover fare nuove richiesta, in parole povere: ad una sola richiesta corrispondono molteplici risposte. Se per esempio abbiamo un lettore di RSS che si aggiorna in automatico la soluzione che applicheremo solitamente è quella di leggere l’RSS ad intervalli di tempo regolari e controlleremo se è cambiato rispetto alla versione precedente. Questo approccio comporterà molte richieste e risposte inutili con un notevole dispendio di risorse. Non sarebbe meglio se fosse la nostra risorsa risorsa ad avvertire la nostra applicazione quando viene modificata e quindi quando effettivamente deve avvenire l’aggiornamento? Se la vostra risposta è SI allora continuate a leggere l’articolo, se invece avete risposto NO potete anche fermarvi qui.
Vedo che avete scelto SI, quindi torniamo a noi: quanto detto prima è possibile grazie al server push e le Pushlet inventate da un ingegnere olandese sono una semplice soluzione al nostro problema. Altra soluzione molto interessante, ma commercial è data anche da un server push creato da una ditta italiano, ma utilizzato in tutto il mondo, il suo nome è Lightstreamer.

La particolarità delle Pushlet è quella di fare un grosso utilizzo della tecnologia DHTML e AJAX, rendendo praticamente inutile la scrittura di codice java.

Una piccola parentesi sull’installazione:
Per prima cosa è necessario scaricare il progetto da SourceForge. Fatto questo creiamo una semplice web application e copiamo le seguenti definizioni all’interno del file web.xml:

<!– Define the pushlet servlet –>
<servlet>
<servlet-name>pushlet</servlet-name>
<servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!– Define the Servlet Mappings. –>
<!– The pushlet –>
<servlet-mapping>
<servlet-name>pushlet</servlet-name>
<url-pattern>/pushlet.srv</url-pattern>
</servlet-mapping>

Fatto questo dobbiamo copiare all’interno della cartella contenente i nostri file sorgenti i due file di configurazione con estensione properties che si trovano nella cartella “pushlet-2.0.2\webapps\pushlet\WEB-INF\classes”. Questi file in fase di deploy andranno messi dentro la cartella “WEB-INF\classes” della nostra web application. Come ultimo passo dobbiamo copiare la libreria pushlet.jar presente nella cartella “pushlet-2.0.2\lib” nella cartella WEB-INF\lib della nostra web application. Svolte queste semplici operazioni preliminari siamo finalmente pronti a scrivere un po’ di codice!

Dalla teoria alla pratica:
Tralascio i dettagli tecnici riguardo il loro funzionamento e passo direttamente a una spiegazione molto pratica.

Il loro funzionamento si basa su un semplice principio:

“Io ho un messaggio che può essere modificato e quando questo viene modificato io devo avvertire tutte le risorse che ne sono in attesa”

Quindi il primo passo è definire un nome da dare a questo messaggio, nel nostro esempio sarà “/test”. Scelto il nome definiamo i campi che questo deve contenere, nel nostro caso conterrà solo “text”, ma può contenerere quanti messaggi vogliamo (o almeno quanti ne riusciamo a fare entrare in un array javascript). Nel nostro esempio il campo “text” conterrà la stringa presente in un campo di testo. L’invio della stringa avverrà alla pressione del tasto invia.

Scriviamo quindi la seguente pagina html e salviamola con nome server.html:

<html>
<head>
<script type="text/javascript" src="lib/ajax-pushlet-client.js"></script>
<SCRIPT type="text/javascript">
function send(msg){
p_publish('/test', 'text', msg);
}
</SCRIPT>
</head>
<body onload="p_join('/test');">
<INPUT type="text" id="textField" value="test"/>
<INPUT type="button" onclick="send(document.getElementById('textField').value);" id="invia" value="invia" />
</body>
</html>

Creaiamo ora il file client.html con il seguente codice al suo interno:
<html>
<head>
<script type="text/javascript" src="lib/ajax-pushlet-client.js"></script>
<SCRIPT type="text/javascript">
function onData(event) {
var text = event.get('text');
document.getElementById("textField").value = text;
}
</SCRIPT>
</head>
<body onload="p_join_listen('/test');">
<INPUT type="text" id="textField" />
</body>
</html>

Creati i due file copiamoli dentro la cartella root del nostro progetto, e colleghiamoci a http://localhost:XXXX/nomeProgetto/server.html e http://localhost:XXXX/nomeProgetto/client.html.

Scrivendo un testo all’interno di serverl.html e premento il tasto “invia” la textbox presente in client.html verrà “magicamente” aggiornata.

Conclusioni:
Le pushlet sono ancora in evoluzione e ad oggi presentano ancora qualche piccolo difetto, ma il suo realizzatore insieme alla comunità OpenSource sta lavorando assiduamente per realizzare un sistema sempre più affidabile.
Attualmente questo sistema è in utilizzo presso diverse applicazioni commerciali citate dallo stesso autore sul sito del progetto. Inoltre sul sito del progetto e nell’archivio che avete scaricato trovate molti esempi da studiare.

Spero di aver stuzzicato la vostra curiosità su questo argomento senza dubbio molto interessante e di cui, a mio parere, sentiremo parlare nel tempo che verrà.

Chi desidera scaricare l’esempio qui descritto può cliccare qui.

Grazie per l’attenzione.

Annunci

~ di jesty su novembre 20, 2006.

6 Risposte to “Pushlet: Un modo semplice per un semplice server push”

  1. ieri sera ero dal mio amico Bobb e abbiamo dato un occhiata ai vari esempi che si trovano sul sito (da solo non l’avrei mai fatto, ahhahaha!!), l’avessi visto prima le avrei utilizzate giusto per quel problemino che poi ho risolto in altro modo. comunque molto interessanti 🙂

  2. Grazie per il commento mi fa piacere che queste quattro riga vi abbiano interessato, io ho fatto anche una piccola lavagna (già pubblicata su questo sito, ora ne ho fatto la nuova versione) che le usa, ma ho il problema che spesso gli eventi superano la dimensione della coda e mi si blocca tutto, devo trovare una soluzione al problema e posto il codice.
    A breve vedo di scrivere qualcosa sul server push, ma questa volta con l’AS Jetty. Buon serata

  3. Ciao Omonimo.
    Devo dire che l’articolo
    mi ha veramente incuriosito e appena
    avrò un minuto di tempo proverò
    questa interessantissima tecnologia.

    Un salutone!

  4. uè, ‘sto nome non mi è nuovo… e se hai ancora qualche file della consuntivazione dovresti essertene accorto!! 😀

  5. ed infatti so chi è:P
    cmq rimani sintonizzato, appena mi attivano l’adsl a roma ci sarà una novità made in my brain 😀

  6. Salve a tutti!!!

    ho provato l’esempio ma non riesco a farlo funzionare.
    il browser mi continua a dare errori alla riga 10 e 12 del server.html con messaggio “Carattere non valido” e alla riga 11 del client.html.
    ho copiato pari pari ciò che era nel sito…
    ho fatto il deploy con tomcat del file war…
    ma niente…
    dove sbaglio?????????
    aiutooooo

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger hanno fatto clic su Mi Piace per questo: