Node, Js
Node, Js
Node, Js
Garcia Hoyos
Node.Js
Servidor en Tiempo Real
JavaScript
Para ello el entorno de Node.js ha desarrollado un conjunto amplio de librerías que no tienen nada que envidiar a otras
plataformas. Por otro lado se han eliminado algunas funcionalidades que en el entorno de servidor no tenían sentido como
por ejemplo el uso de Document Object Model.
Node.js y Threads
La primera duda que nos surge es: ¿Qué sucede si ese hilo se pone a realizar una tarea que lleva X
tiempo y queda bloqueado?. Esa es una buena pregunta y la respuesta es que Node.js gestiona
todas sus tareas de una forma asincrona. Esto nos puede sonar mucho a AJAX. Ahora bien ¿Cómo
funcionan esas peticiones asíncronas exactamente?.
Node y tareas asíncronas
Para poder trabajar de una forma óptima
Node.js delega todo el trabajo en un pool de
threads. Este pool de threads esta construido
con la librería libuv. Esta librería dispone de
su propio entorno multithread asíncrono.
Node.js envía el trabajo que hay que realizar
al pool.
server.on('request', control);console.log('Server
running');server.listen(8080);
var http = require('http');
http.createServer(function(peticion, respuesta){
var codigo_html = '<html> <head> <title> Ejemplo de hola mundo </title>
</head> <body> Hola mundo </body> </html>';
respuesta.writeHead(200, 'text/html'); respuesta.end(codigo_html);
}).listen(3000, '127.0.0.1');
console.log('El servidor esta funcionando correctamente en
http://localhost:3000/');
var http = require('http');
var url = require('url');
var fs = require('fs');
var mime_types = {
'js' : 'text/javascript',
'html' : 'text/html',
'css' : 'text/css',
'jpg' : 'image/jpg',
'gif' : 'image/gif',
'png' : 'image/png’
};
http.createServer(function(peticion, respuesta){
var path_nombre = (url.parse(peticion.url).pathname == '/') ? '/index.html' : url.parse(peticion.url).pathname; var
ruta_a_archivo = 'contenido' + path_nombre; fs.exists(ruta_a_archivo, function(existe){ if(existe){
fs.readFile(ruta_a_archivo, function(error, contenido_archivo){ if(error){ respuesta.writeHead(500, 'text/plain');
respuesta.end('Error interno.'); }else{ var extension = ruta_a_archivo.split('.').pop(); var mime_type =
mime_types[extension]; respuesta.writeHead(200, {'Content-Type': mime_type});
respuesta.end(contenido_archivo); } }); }else{ respuesta.writeHead(404, 'text/plain');
respuesta.end('Error 404. El enlace no existe o ha dejado de existir.'); } });}).listen(3000, '127.0.0.1');console.log('El
servidor esta funcionando correctamente en http://localhost:3000/');
• <!DOCTYPE><html><head> <title> Ejemplo de Node.js </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"
/></head><body> <h1> Info </h1> <ul> <li> <a
href="/index.html"> Index </a> </li> <li> <a href="/info.html"> Info
</a> </li> </ul> <p> Esta es la página info </p></body></html>
• <!DOCTYPE><html><head> <title> Ejemplo de Node.js </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"
/></head><body> <h1> Index </h1> <ul> <li> <a
href="/index.html"> Index </a> </li> <li> <a href="/info.html"> Info
</a> </li> </ul> <p> Bienvenido/a a la página principal
</p></body></html>