Que es node.js y con que se come?

3 nov 2012 by shadow_of__soul, No Comments »

nodejs logo

Para ser un poco sensacionalista, seria la vedette de la web de hoy (un rial en potencia el tipo :P ). Quiero hacer una pequeña introduccion a node.js, sobre que es, para que sirve y sus principales caracteristicas, mas adelante tendremos articulos que van a ir deatallando diferentes API’s y modulos que son muy utiles y populares.

Javascript en el servidor y algo mas.

La forma mas simplista de definirlo, seria esa, el poder ejecutar javascript del lado del servidor. Javascript siempre ha sido un lenguaje utlizado en la parte del cliente, en el navegador (y en otros ambitos, como lenguaje de scripting de engines de videojuegos por ejemplo), no existia hasta la aparicion de node.js, una forma rapida y sencilla de ejecutar javacript del lado del servidor. Node.js logra esto creado una plataforma sobre el motor de parseo de javascript de chrome, el famoso v8. Asi, permite crear aplicaciones escalables,flexibles, de alta flexiblidad en cuanto a I/O (por su estructura en base a eventos), lo que permite el instanciamiento de procesos y es ideal para aplicaciones en tiempo real.

A pesar de que efectivamente node.js depende de javascript, tenemos un modelo diferente al usado por muchos lenguajes del lado servidor y lenguajes en general. Este modelo es llamado   non-blocking I/O, donde no existen hilos de ejecucion (como existen en c++ o en java) sino que todo es manejado por un unico proceso, que hace las tareas fundamentales para poder devolver lo que requiere el usuario por medio del evento y procesa cualquier tarea secundaria (como escribir un archivo, insertar un registro en una bases de datos) la hace de manera independiente, asi el usuario ya hubiera terminado la conexion o la interaccion con node.js.

Para lograr este modelo basado en eventos, se usa un patron diferente de programacion al que se ve normalmente en javascript, lo que se llama, funciones asincronicas. El ejemplo en el javascript “comun y corriente” mas facil que tenemos, es la funcion setInterval que recibe como parametro una funcion directamente, que es ejecutada cada X cantidad de milisegundos. En node.js por ejemplo, tenemos las funciones que acceden al sistema de archivos, por ejemplo, para obtener el estado de un archivos:

1
2
3
4
5
var fs=require('fs');

fs.stat('ruta/al/archivo',function(statObj){ /* esta funcion se va ejecutar en algun momento, pero el ciclo de ejecucion sigue */  console.log('funcion ejecutada') });

console.log("foo");

En este ejemplo, le pasamos una funcion como parametro, pero al ser asincronica, el ciclo de ejecucion sigue, por lo tanto, muy probablemente, se ejecute primero el console.log(‘foo’) que el console.log(‘funcion ejecutada’). En este ejemplo parece muy sencillo, pero en un codigo en produccion, donde tenemos variables a las que se les cambia de valor en algun punto del codigo, o donde debemos usar un loop para hacer una accion repetitiva, tener un control y coordinacion de la ejecucion de las funciones asincornicas es fundamental (por ejemplo, con el uso de closures).

Otra cosa importante para destacar de node, es el uso de modulos a diferencia del javascript que tenemos en el browser, donde usualmente usamos una tag <script> para incluir un nuevo modulo/clase/funcion, en node usamos la funcion require(‘modulo’) asignandolo a una variable, para su uso. Esta funcion puede tomar tanto modulos inhertes en su API (como en el anteior ejemplo, ‘fs’), como tambien rutas directas a archivos, donde tengamos nuestros propios modulos. Tambien node.js cuenta con un gestor de modulos propios, llamado npm donde con un simple comando podemos instalar modulos de manera local (para el projecto que estemos desarollando actualmente) como de manera global (para todos los projectos dentro de nuestro OS).

Soporte, produccion, y otras yerbas

Hace un tiempo largo que node.js esta en el ambiente, tiene un soporte muy variado y extenso de API’s y de modulos, para bases de datos, para networking muy variado (un punto fuerte de node.js es tener modulos como express.js que nos permite servir paginas directamente desde node, sin apache o nginx, o socket.io que nos permite abrir conexiones persistentes en con el usuario, ideal para aplicaciones en tiempo real, videojuegos y demases), para servicios, como twitter, facebook y etc.. A mi parecer esta bastante maduro, aunque no lo reconozco como reemplazo de lenguajes con mas años como php, no por que sea mejor o peor, sino por que la cantidad de programadores y de soporte a nivel hosting de node.js es limitado a unas cuantas opciones, y probablemente, para un projecto simple de una tienda virtual, o un sitio empresarial, no sea la mejor idea (por la manotencion a corto y mediano plazo por parte del cliente si por alguna razon no quiere mas de nuestros servicios). En cambio, lo veo como un reemplazo genial de lo que personalmente yo usaba a Java, para crear aplicaciones de servidor, que respondan a pedidos (como servidor de chat, un software de monitoreo, etc..), te permite desplegar una aplicacion de este tipo en una fraccion de tiempo de lo que podrias hacerlo en java o cualquier otro lenguaje.

Sin mas, prometo segui escribiendo en detalle sobre node.js, hay muchooo que contar, que experimentar tambien, por lo pronto, los invito a que miren un poco su documentacion y bajarse sus instaladores disponible para todas las plataformas.

Etiquetas: , , ,

Sigueme !

Follow Me! Follow Me! Follow Me!