Funciones asincrónicas y el bucle de eventos de Node.js

Funciones asíncronas

Todo el mundo sabe que JavaScript es de naturaleza asíncrona y también lo es Node. El principio fundamental detrás de Node es que una aplicación se ejecuta en un solo hilo o proceso y, por lo tanto, los eventos se manejan de forma asíncrona.

Si consideramos cualquier servidor web típico como Apache, requiere subprocesos separados para cada proceso hasta que se satisface la solicitud. La desventaja de usar subprocesos múltiples es que no consumen mucha memoria y no se escalan muy bien. Además, debemos asegurarnos de que cada proceso sea seguro para subprocesos y que no aparezca un punto muerto.

Pero Node hace las cosas de manera diferente. Al iniciar una aplicación Node, crea solo un único hilo de ejecución. Cuando el Node recibe una solicitud, asigna el hilo a ese proceso y no se puede procesar ninguna otra solicitud hasta que haya terminado de procesar el código de la solicitud actual. Por lo tanto, Node maneja varias requests al mismo tiempo mediante el uso de funciones de bucle de eventos y devolución de llamada. Un bucle de eventos es un tipo de funcionalidad que básicamente sondea eventos específicos e invoca controladores de eventos cuando es necesario. Una función de devolución de llamada es este controlador de eventos en Node.

En las aplicaciones de Node, el Node inicia la solicitud pero no espera alrededor de la solicitud para obtener la respuesta. En lugar de eso, adjunta una función de devolución de llamada a la solicitud. Cuando la solicitud se ha completado o la solicitud ha recibido la respuesta, la función de devolución de llamada emite un evento para hacer algo con los resultados de la acción solicitada o el recurso solicitado.

Si varias personas acceden a una aplicación de Node al mismo tiempo y la aplicación necesita acceder a un recurso desde un archivo, Node adjunta una función de devolución de llamada con cada solicitud. Tan pronto como el recurso esté disponible para esa solicitud en particular, se llama a una función de devolución de llamada para la solicitud de cada persona. El Node puede manejar otras requests mientras tanto.

El servicio de las requests paralelas en la aplicación Node depende de qué tan ocupada esté la aplicación y cómo esté diseñada.

Ejemplos:

// Normal Function
function add(a,b){
    return a+b;
}
  
// Async Function
async function asyncadd(a,b){
    Return a+b;
}

Apertura y escritura asincrónica del contenido de un archivo

// load http module
var http = require('http');
var fs = require('fs');
  
// load http module
var http = require('http');
var fs = require('fs');
  
// create http server
http.createServer(function (req, res) {
  
        // open and read in helloworld.js
        fs.readFile('helloworld.js', 'utf8', function(err, data) {
  
        res.writeHead(200, {'Content-Type': 'text/plain'});
        if (err)
            res.write('Could not find or open file for reading\n');
        else
  
            // if no error, writing JS file to a client
            res.write(data);
            res.end();
            });
}).listen(8124, function() { console.log('bound to port 8124');});
  
console.log('Server running on 8124/');

Publicación traducida automáticamente

Artículo escrito por mayank021 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *