‫Istruttore: In questo video
‫e nel prossimo ci addentreremo in un
‫altro pezzo importante dell'architettura Node JS con
‫eventi JS e architettura event-driven.
‫Quindi la maggior parte dei moduli principali
‫di Node, come quelli che abbiamo già usato, come HTTP, File System
‫e Timer, sono costruiti attorno a un'architettura guidata dagli
‫eventi e ovviamente possiamo anche usare
‫questa architettura a nostro vantaggio nel nostro codice.
‫E il concetto è in realtà abbastanza semplice.
‫Quindi, in Node, ci sono alcuni oggetti chiamati
‫emettitori di eventi che emettono eventi con nome non
‫appena accade qualcosa di importante nell'app, come una richiesta che
‫colpisce il server, o un timer in scadenza, o un file
‫che sta finendo di leggere.
‫Questi eventi possono quindi essere rilevati dagli ascoltatori
‫di eventi impostati da noi sviluppatori,
‫che attiveranno le funzioni di callback associate a ciascun ascoltatore, ok.
‫Quindi, di nuovo, da un lato, abbiamo
‫emettitori di eventi e, dall'altro, ascoltatori di eventi che
‫reagiranno agli eventi emessi chiamando la funzione di callback.
‫Semplice, vero?
‫E probabilmente il modo migliore per capirlo
‫è guardare un esempio.
‫E quindi capiamo brevemente come Node
‫usa l'architettura event-driven per gestire le richieste del
‫server nel modulo HTTP che abbiamo già usato in un'altra sezione.
‫Quindi, quando vogliamo creare un server,
‫usiamo il metodo Create
‫Server e lo salviamo in una variabile server.
‫Questa implementazione qui è leggermente diversa
‫da quella che abbiamo fatto prima, ma funziona esattamente allo stesso modo.
‫Comunque, questo server. on è il modo
‫in cui creiamo effettivamente un listener, e in questo caso per l'evento "richiesta".
‫Quindi diciamo che il nostro server è
‫in esecuzione e viene effettuata una nuova richiesta.
‫Il server funge da emettitore ed emetterà automaticamente
‫un evento chiamato "richiesta" ogni volta che una richiesta
‫raggiunge il server.
‫Semplice, vero?
‫Quindi, poiché abbiamo già impostato un
‫listener per questo evento esatto, verrà chiamata automaticamente la funzione
‫di callback che abbiamo collegato a questo listener.
‫E questo tipo di funzione che conosciamo
‫già da prima, invierà semplicemente alcuni dati al client.
‫Ora, funziona in questo modo perché dietro le
‫quinte il server è in realtà un'istanza della
‫classe Node JS EventEmitter, quindi eredita tutta
‫questa logica di emissione e ascolto di eventi da
‫quella classe EventEmitter, e non preoccuparti, useremo
‫tutto bene nel prossimo video, in modo da
‫acquisire familiarità con tutte queste logiche.
‫Ora, solo per finire questa lezione,
‫credo sia importante menzionare che questa logica EventEmitter è
‫chiamata il pattern Observer nella programmazione Javascript in
‫generale, ed è un pattern abbastanza popolare con
‫molti casi usati.
‫Quindi l'idea è di impostare lì
‫un osservatore, in questo caso l'ascoltatore di eventi, che
‫continua ad aspettare, continua ad osservare il soggetto che
‫alla fine emetterà l'evento che l'ascoltatore sta aspettando.
‫E l'opposto di questo schema sono semplicemente le funzioni che
‫chiamano altre funzioni, che è qualcosa a cui
‫siamo più abituati in realtà, giusto?
‫Ma il modello dell'osservatore è
‫stato progettato per reagire piuttosto che per chiamare.
‫E questo perché c'è un enorme vantaggio nell'usare
‫questa architettura, che è il fatto che
‫tutto è più disaccoppiato.
‫Non abbiamo, ad esempio, funzioni dal modulo
‫File System che chiamano funzioni dal modulo HTTP
‫perché sarebbe un gran casino.
‫Invece, questi moduli sono piacevolmente disaccoppiati e
‫autonomi, ciascuno emettendo eventi a cui
‫altre funzioni, anche se provengono da altri
‫moduli, possono rispondere.
‫Inoltre, l'utilizzo di un'architettura basata sugli eventi
‫rende molto più semplice reagire più volte allo
‫stesso evento.
‫Tutto quello che dobbiamo fare è impostare più ascoltatori, giusto?
‫Ok, questa è l'architettura basata sugli eventi di Node
‫in poche parole.
‫E non preoccuparti se questo sembra un po'
‫troppo teorico, vedrai questa logica utilizzata in
‫molte situazioni durante il corso, a partire dal prossimo video.