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/');