Node.js - Loop eventi

Node.js è un'applicazione a thread singolo, ma può supportare la concorrenza tramite il concetto di event e callbacks. Ogni API di Node.js è asincrona ed essendo a thread singolo, usanoasync function callsper mantenere la concorrenza. Il nodo utilizza il pattern dell'osservatore. Il thread del nodo mantiene un ciclo di eventi e ogni volta che un'attività viene completata, attiva l'evento corrispondente che segnala l'esecuzione della funzione listener di eventi.

Programmazione guidata dagli eventi

Node.js utilizza molto gli eventi ed è anche uno dei motivi per cui Node.js è piuttosto veloce rispetto ad altre tecnologie simili. Non appena Node avvia il suo server, avvia semplicemente le sue variabili, dichiara le funzioni e quindi attende semplicemente che si verifichi l'evento.

In un'applicazione basata sugli eventi, generalmente è presente un ciclo principale che ascolta gli eventi e quindi attiva una funzione di callback quando viene rilevato uno di questi eventi.

Sebbene gli eventi siano abbastanza simili ai callback, la differenza sta nel fatto che le funzioni di callback vengono chiamate quando una funzione asincrona restituisce il suo risultato, mentre la gestione degli eventi funziona sul pattern dell'osservatore. Le funzioni che ascoltano gli eventi agiscono comeObservers. Ogni volta che un evento viene generato, la sua funzione listener inizia l'esecuzione. Node.js ha più eventi integrati disponibili tramite il modulo eventi e la classe EventEmitter che vengono utilizzati per associare eventi e ascoltatori di eventi come segue:

// Import events module
var events = require('events');

// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

Di seguito è riportata la sintassi per associare un gestore di eventi a un evento:

// Bind event and event  handler as follows
eventEmitter.on('eventName', eventHandler);

Possiamo attivare un evento a livello di codice come segue:

// Fire an event 
eventEmitter.emit('eventName');

Esempio

Crea un file js denominato main.js con il codice seguente:

// Import events module
var events = require('events');

// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

// Create an event handler as follows
var connectHandler = function connected() {
   console.log('connection succesful.');
  
   // Fire the data_received event 
   eventEmitter.emit('data_received');
}

// Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);
 
// Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function() {
   console.log('data received succesfully.');
});

// Fire the connection event 
eventEmitter.emit('connection');

console.log("Program Ended.");

Ora proviamo a eseguire il programma sopra e controlliamo il suo output -

$ node main.js

IT dovrebbe produrre il seguente risultato:

connection successful.
data received successfully.
Program Ended.

Come funzionano le applicazioni dei nodi?

Nell'applicazione nodo, qualsiasi funzione asincrona accetta un callback come ultimo parametro e una funzione di callback accetta un errore come primo parametro. Rivisitiamo di nuovo l'esempio precedente. Crea un file di testo denominato input.txt con il seguente contenuto.

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Crea un file js denominato main.js con il seguente codice:

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err) {
      console.log(err.stack);
      return;
   }
   console.log(data.toString());
});
console.log("Program Ended");

Qui fs.readFile () è una funzione asincrona il cui scopo è leggere un file. Se si verifica un errore durante l'operazione di lettura, il fileerr object conterrà l'errore corrispondente, altrimenti i dati conterranno il contenuto del file. readFile passa err e dati alla funzione di callback dopo che l'operazione di lettura è stata completata, che alla fine stampa il contenuto.

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!