Como funciona Node.js

NodeJS

Node.js, en resumidas cuentas, es una plataforma para utilizar javascript del lado del servidor, se podría decir, aunque no de manera muy exacta, que hace las veces de php, asp o jsp.

tomado de Wikipedia

Y digo que no de manera muy exacta porque cada lenguaje tiene sus restricciones, por ejemplo php está planeado para ser un script interpretable que depende de un servidor web como apache o iis. Node hace las veces de un código y de un servidor web, pudiéndose correr sin depender de uno u otro.

V8 googles javascript engine Node utiliza la máquina virtual de javascript de google conocida como v8 para interpretar el código javascript. La segunda característica más notable es que puede levantar servidores web en casi cualquier puerto que se le indique y generar llamadas tipo comet, osea que son conexiones persistentes que se comportan como sockets y que hacen posible la comunicación única bidirideccional entre el cliente y el servidor.

Para poner esto más claro, en php, por ejemplo, llamamos un archivo .php y, después de un procesamiento en el servidor, obtenemos un archivo de texto, una imagen o cualquier otro tipo de archivo, dependiendo de como esté programado; pero siempre, siempre, al final del archivo un EOF o Fin De Archivo (Por sus siglas en inglés) que nos indica que la conexión se cerró. (PHP también es capaz de generar conexiones persistentes con diferentes técnicas aunque inicialmente no fue planeado para ello), si se quieren obtener más datos del servidor hay que hacer otra petición, el servidor no puede simplemente enviar los datos al cliente.

Mientras que una conexión tipo comet o persistente no envía el EOF y eso hace que la conexión no se cierre y el servidor pueda enviar de manera asíncrona al cliente los datos que sean necesarios. Esto nos sirve para hacer juegos, chats y push de bigdata en clientes web sin tener que refrescar el sitio y de manera fluida, aunque utiliza mucho ancho de banda y las demás aplicaciones que corran junto a la nuestra pueden verse afectadas.

Ventajas

  • Se programa en javascript así que la curva de aprendizaje es mínima
  • Levantar un servidor es muy facil
  • Tiene un api sencillo de aprender y no muy grande
  • Tiene su propio repositorio de módulos y es sencillo de utilizar
  • No crea un hilo por conexión y duerme mientras no se utiliza
  • Tiene un intérprete en línea de comandos

No hablaré de las desventajas ya que estos temas tienen a ser muy polémicos, pero sí diré que está en su versión 0.8.5 lo cual nos indica que sigue en beta, aunque bastante robusto la mayoría, hay ciertas cosas que aún falta probar.

Como se usa

Para crear un servidor a la escucha sólo escribimos un archivo llamado hola_edmundo.js

 var http = require('http');
var server = http.createServer(function(request,response)
{
response.writeHead(200);
response.end('Hola Edmundo,  Como están los niños?');
//2 de mis primos se llaman Edmundo y niguno tiene hijos
console.log("Request url :: " + request.url);
});
server.listen(8080);

Para correrlo basta ejecutar el comando node hola_edmundo.js

En la línea 1 estamos utilizando require, require es una función de node para importar módulos, todo en node se basa en módulos; a mi parecer es una manera elegante y limpia de resolver la carencia de OOP en javascript, En esta línea estamos importando el módulo http que nos permite crear servidores del tipo que su nombre indica.

En la línea 2 estamos utilizando la función createServer que acepta una función como parámetro opcional a modo de listener a la escucha el un evento; como en todo en javascript si no pasamos esta función como parámetro se detendrá la ejecución del código posterior hasta que no se haya terminado de crear el servidor. Esta función recibe 2 parámetros, uno es el request o petición y el otro el response o respuesta.

En la línea 4 le estoy diciendo que escriba la cabecera con sólo la opción de la respuesa 200, osea todo bien.

En la línea 5 utilizo la función end para indicar como va a terminar el programa, en este caso digo que escriba una frase muy ingeniosa que se me ocurrió mientras escribía este post. Esto es lo que se va a ver en el navegador.

En la línea 7 utilizo el la función log del objeto console que no funciona igual que su homónimo del lado del cliente, aunque parecido, al ejecutar esta línea y pasarle como parámetro request.url puedo ver que en cuanto alguien (o algo) hace una petición me mostrará el string url almacenado en el objeto request. El request es lo que el cliente está enviando al hacer la petición, por ejemplo, si mi código está corriendo en localhost y yo pido http://localhost:8080/chido_punketo_y_a_gogo al mostrar el url en mi terminal se mostrara lo siguiente:

 /chido_punketo_y_a_gogo

O el url que esté yo siguiendo, esta es una muestra de que podemos hacer la petición que nuestro archivo js no está funcionando igual que un php que a cada petición es llamado e interpreta lo enviado y devuelve algo desado, es más bien como apache que se pone a la escucha y recibe todas las peticiones.

Pensándo un poco podemos deducir que importando más módulos podemos hacer todo un árbol de decisiones basados en la petición del usuario, o bien un socket para crear un chat.

Y finalmente en la línea 9 inicializo el servidor para que escuche el puerto 8080.

Pueden encontrar el código de este pequeño ejemplo en mi github

En los próximos posts seguiré escribiendo acerca de Node.js espero pronto poner un tutorial de instalación y uso y algunos ejemplos prácticos.

Haré todo lo posible por narrar mi próximo post como Bob Ross

One thought on “Como funciona Node.js

  1. Buena onda esta la de compartir los primeros pininos, – y sí- ya muchos le quieren apostar duro a NodeJS, en lo personal lo de la curva de aprendizaje me llama mucho la atención: tiempo tiempo tiempo.

    Una combinación explosiva con Mongo DB, lo que seguramente nos permitiré ver apps hecha en menos tiempo y con una viveza o dinamismo y conexión a otras APIs: tuiter, feisbu, google, etc.

    Seguiré pendiente y probando…