Il concetto di concorrenza in applicazioni Node.JS

Come gestire la concorrenza in applicazioni multitask utilizzando gli strumenti messi a disposizione da Node.JS

Un esempio pratico

Per chiarire qual è l’approccio usato da Node.js, consideriamo le seguenti esigenze: vogliamo avere un server che faccia “qualcosa” ogni tre secondi. Non ci interessa cosa sia questo “qualcosa”: ci interessa soltanto il fatto che dobbiamo gestire un ciclo lento, che chiameremo appunto slow cycle, con un tempo fissato in tre secondi.
Oltre a questa attività, una volta al secondo vogliamo eseguire una chiamata HTTP GET verso un server remoto, e leggere alcuni dati delle risposta. Tale chiamata potrebbe essere una banale richiesta di ping per monitorare lo stato del server, un’interrogazione SOAP o una chiamata Ajax. Anche in questo caso non ci interessa sapere “cosa” deve eseguire questo ciclo, ma ci interessa soltanto che tale attività venga eseguita in parallelo alla precedente, con un timing di un secondo. Per semplicità, nell’implementare questa specifica, ci limiteremo a leggere un valore dell’header della risposta HTTP.
Consideriamo infine la necessità di rispondere alle normali richieste che arrivano sul server da parte degli utenti, anche queste sotto forma di una richiesta HTTP. Quest’attività non sarà a scadenza fissa, perché non possiamo assumere che gli utenti avanzino una richiesta ogni tot tempo. Sappiamo soltanto che riceveremo delle richieste, cioè in maniera asincrona rispetto alle altre attività.

Il codice Node.js che soddisfa tutte queste esigenze è il seguente:

dove notiamo l’introduzione della chiamata http.get(), che è l’unica novità rispetto alle lezioni precedenti. A parte questo il codice non dovrebbe necessitare di alcun commento di natura sintattica, perché tutte le funzioni utilizzate sono già state discusse nelle lezioni precedenti.