giovedì, dicembre 04, 2014

Esercitazioni su node.js: esercizio 7

Testo dell'esercizio
Giusto per ribadire il concetto di stream che genera eventi asincroni da gestire, scrivere un programma, come il precedente,  per effettuare una richiesta HTTP di tipo GET all'indirizzo http://cspnet.it, questa volta però, visualizzare tutti i dati della risposta solo quando la richiesta è terminata.
Come ulteriore vincolo, l'unica variabile globale, (a livello di intero programma, esterna a qualsiasi funzione) deve essere solo la variabile var http = require('http');

Suggerimenti
Ricordate che l'evento data viene generato piu' volte, al termine della visualizzazione della risposta (che sarà ovviamente la pagina html home del sito di csp), provate infatti a stampare il numero di volte che è stato emesso l'evento data.
Per il vincolo richiesto, non scordate le IIF

Buon lavoro!

Una possibile soluzione
 var http = require('http'),  
   i = 0;  
   
 (function() {  
      var totalData = "",  
          numeroChunk = 0;  
   
          http.get('http://cspnet.it', function (response) {  
             response.setEncoding('utf8');  
             response.on('data', function(data) {  
                totalData += data;  
                numeroChunk++;  
             });  
            response.on('error', console.error);  
            response.on('end', function() {  
                 console.log("FINITO: " +   
                        totalData +   
                       " NUMERO CHUNK " +   
                            numeroChunk);  
            });  
          });  
 })();  
Il prossimo post verterà sul potente concetto di stream in node.js.
L'oggetto response vedetelo come un flusso di dati che viene alimentato dal server e letto dal client quando i dati sono disponibili.

Per motivi di efficienza, i dati non sono mandati in un unico blocco, l'evento 'data' dello stream response viene emesso più volte ed ogni volta viene eseguita la funzione di callback che accoda i dati ricevuti nella variabile totalData e incrementa il contatore numeroChunk.

Quando non ci sono più dati, lo stream emette l'evento end, che ci permette di definire una funzione di callback che stampa a video i dati finali.

Ho aggiornato su github il progetto, effettuate un git pull per aggiornare i sorgenti che avete in locale, come mostrato in questo post

Come al solito, per dubbi e/o domande: commentate!

Alla prox.
Ivan


Nessun commento:

Posta un commento