Node.js - Loop de eventos

Node.js é um aplicativo de thread único, mas pode suportar simultaneidade por meio do conceito de event e callbacks. Cada API do Node.js é assíncrona e de thread único, eles usamasync function callspara manter a simultaneidade. O Node usa o padrão do observador. A thread do nó mantém um loop de eventos e sempre que uma tarefa é concluída, ela dispara o evento correspondente que sinaliza a execução da função de ouvinte de eventos.

Programação Orientada a Eventos

O Node.js usa eventos intensamente e também é um dos motivos pelos quais o Node.js é muito rápido em comparação com outras tecnologias semelhantes. Assim que o Node inicia seu servidor, ele simplesmente inicia suas variáveis, declara funções e então simplesmente espera que o evento ocorra.

Em um aplicativo orientado a eventos, geralmente há um loop principal que escuta os eventos e aciona uma função de retorno de chamada quando um desses eventos é detectado.

Embora os eventos sejam bastante semelhantes aos retornos de chamada, a diferença está no fato de que as funções de retorno de chamada são chamadas quando uma função assíncrona retorna seu resultado, enquanto o tratamento de eventos funciona no padrão do observador. As funções que ouvem os eventos agem comoObservers. Sempre que um evento é disparado, sua função de ouvinte começa a ser executada. O Node.js tem vários eventos embutidos disponíveis por meio do módulo de eventos e da classe EventEmitter que são usados ​​para vincular eventos e ouvintes de eventos da seguinte maneira -

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

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

A seguir está a sintaxe para vincular um manipulador de eventos a um evento -

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

Podemos disparar um evento programaticamente da seguinte maneira -

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

Exemplo

Crie um arquivo js chamado main.js com o seguinte código -

// 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.");

Agora vamos tentar executar o programa acima e verificar sua saída -

$ node main.js

A TI deve produzir o seguinte resultado -

connection successful.
data received successfully.
Program Ended.

Como funcionam os aplicativos do Node?

No aplicativo Node, qualquer função assíncrona aceita um retorno de chamada como o último parâmetro e uma função de retorno de chamada aceita um erro como o primeiro parâmetro. Vamos revisitar o exemplo anterior novamente. Crie um arquivo de texto denominado input.txt com o seguinte conteúdo.

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

Crie um arquivo js chamado main.js com o seguinte código -

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");

Aqui fs.readFile () é uma função assíncrona cujo propósito é ler um arquivo. Se ocorrer um erro durante a operação de leitura, oerr object conterá o erro correspondente, caso contrário, os dados conterão o conteúdo do arquivo. readFile passa err e dados para a função de retorno de chamada após a conclusão da operação de leitura, que finalmente imprime o conteúdo.

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