Dopo aver fatto quattro chiacchiere sul Javascript e dopo che i più volenterosi e amanti della materia avranno preso maggiori informazioni in rete, possiamo iniziare a fare qualche chiacchiera in maniera molto “concisa” di NodeJS.
Per affrontare NodeJS bisogna considerare i seguenti concetti:
– Derivato dal motore V8 chrome (js) – Rimando al link
– Architettura orientata agli eventi I/O Asincrono
– Libreria libuv (Event Loop)
– Agevola Scalabilità
– Promise
Orientato agli eventi
NodeJS è orientato agli eventi, cerchiamo di capire brevemente per poi, in altri contesti, andare a dimostrare attraverso dei codici.
Nell’architettura ad eventi, il processo non attende che qualcosa avvenga ma viene “Informato” che qualcosa sia avvenuto e che qualche attività deve essere svolta (Il tipico esempio di un pagamento che scatena una transazione con carta di credito). Non siamo sempre in attesa che avvenga un pagamento, altrimenti non potremmo fare più nulla; qualcuno ci “avvisa” che un pagamento è stato effettuato ed il nostro processo derà con la gestione della transazione.
Questo, ovviamente, genera un funzionamento “asincrono” nel senso che più eventi possono essere generati e gestiti dal nostro processo ed ognuno risponderà ad un evento particolare con una serie di elaborazioni. Questo permette al nostro processo di svolgere, nel mentre attende eventi, altre operazioni.
libuv ed Event Loop
La libreria libuv è quella che in nodeJS permette la gestione dell’EventLoop che viene attivato ogni volta che eseguiamo un processo nodeJS e viene disattivato alla fine del processo.
NodeJS è a thread singolo ed esegue una sola istruzione alla volta. Ciò che fa funzionare nodeJS in maniera asincrona, è proprio la gestione dell’Event Loop.
Quando NodeJS ha bisogno di una risorsa (che richiederebbe il blocco del processo in attesa della risposta) ne fa richiesta al sistema operativo, che potrà eseguire più istruzioni contemporaneamente; quando la risorsa è pronta, il sistema operativo informa nodeJS della disponibilità della risorsa e viene eseguito un codice di ‘callback’ particolare…
Oggetto.on("evento",function(){ //funzione di callback
scrivi("Evento avvenuto")
})
Quando l’evento “evento” viene generato (per l’oggetto ‘Oggetto’) allora sarà eseguito il codice della funzione di callback. Una funzione di callback, quindi, non è altro che il codice da eseguire quando sarà generato l’evento.
la particella ‘on’ è un modo di dire a nodeJS che ci si vuole registrare al particolare evento “evento”. Il tutto passa per la fase di polling dell’Event Loop ma, come sempre, non è lo scopo di questo “spazio”.
Intenzionalmente non sono stati affrontati argomenti di dettaglio per l’Event Loop; in rete troverete molto materiale a riguardo (in questo caso vi consiglio di utilizzare la documentazione ufficiale di nodeJS (magari traducendola con Google se l’inglese non è la vostra lingua migliore) che troverete a questo indirizzo.
Per questo articolo è tutto, prossimamente faremo qualche chiacchiera anche sulla scalabilità di nodeJS e sulle “promise” che sono un argomento molto interessante in nodeJS.
Alla prossima e… buona programmazione a tutti.Data di ultima modifica 12 Giugno 2024