Twitter Flickr Pinterest LinkedIn YouTube Google Maps E-mail RSS
formats

Introducción a Node.js

Node.js es una nueva tecnología bastante asombrosa y potente, pero al menos que seamos desarrolladores de Javascript, el proceso de aprendizaje puede ser un poco abrumador.

Node.js es un entorno de programación del lado del servidor (server-side) a diferencia de la ejecución normal en el lado del cliente o navegador (client-side). Esta basado en lenguaje Javascript (que no tiene nada que ver con JAVA, ojo), arquitectura orientada a objetos, funcionamiento por eventos del servidor, basado en el motor V8. Este motor es de código abierto y fue creado por Google, siendo su programador jefe Lars Bak.

El motor V8 se ha programado en C++ y es usado por el navegador Google Chrome además de otros sistemas como el browser del sistema Operativo Android.

Sepamos algo más sobre NodeJS …

NodeJs, conocido con la palabra Node, surge en el año 2009 como necesidad existente a la hora de desarrollar sitios web, donde la concurrencia y la velocidad eran premisas a cumplir.

Una de las características más importantes de Node es la velocidad, está especialmente diseñado para realizar operaciones I/O( entrada y salida).

Es esencialmente un framework para realizar operaciones I/O, basado en eventos y streams. Cambia la filosofía de trabajo y la manera de entender el lenguaje Javascript.

Cuando programamos con Node, solamente nos preocupamos que el código que se escriba se ejecute correctamente en el servidor. La programación asíncrona y los eventos del lado del servidor son otros factores a tener en cuenta.

NodeJs implementa protocolos usados en Internet, como son HTTP, DNS, SSL, TLS. Un protocolo especial es SPDY, una implementación sencilla en nodejs, desarrollado principalmente por google y que pretende modernizar el protocolo HTTP, siendo más rápido y con mayor rendimiento.

Node es usado por empresas importantes, como Linkein, optimizando los recursos y siendo capaz de reducir el numero de servidores para dar soporte a los usuarios.

Una gran virtud de node es que los procesos ocupan poca memoria, respecto a otros lenguajes, por lo que los requisitos del servidor son menores. Como ejemplo, podríamos llegar a tener 1000 usuarios conectados concurrentemente y ocupar sólo 5 Mb de memoria. Por lo que las empresas ahorran en infraestructuras, es decir, en dinero.

Nodejs1

 Instalación

El punto de partida es nodejs.org, es la web donde podremos descargarlo e instalarlo.

El proceso cambia en función del sistema operativo, y su modo de trabajo es independiente de la plataforma. Eso si, en función del sistema operativo pueden cambiar los módulos. Los módulos son paquetes de software para tener soporte a diferentes necesidades.

La instalación en Windows consiste en ejecutar un archivo con extensión msi, seguir los pasos. Una vez instalado podemos usarlo en línea de comandos mediante la instrucción node.

En Linux se puede instalar de diferentes formas. Lo más aconsejable es bajárselo de los repos de tu distro.

Ejemplo desde Ubuntu:

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs npm

Otra alternativa es descargarse los fuentes y compilarles.

En Mac con homebrew,
mediante el comando brew install nodejs

Una pregunta que seguramente os planteéis, es como montar esto en un servidor o hosting. Recomiendo servidores dedicados y no solamente ceñirnos a Apache o IIS. Existe un servidor del que hablaré en otra entrada llamada nginx. Por ahora os dejo el enlace, pero comentan que es extremadamente rápido. Os dejo otro enlace en ingles, no hay muchos, que muestra cómo configurar Node en un servidor virtual en Plesk, paciencia 😉

Otras particularidades.

Node.js implementa alguna especificación CommonJS. Esto es un proyecto cuya meta es especificar un ecosistema para Javascript fuera del uso del navegador. Inicialmente el proyecto se llamo ServerJS pero desde el año 2009 fue renombrado a CommonJS.

Node también proporciona un entorno para el testeo interactivo, REPL.
Read-Eval-Print Loop, es un simple e interactivo entorno de programación. Se encuentra disponible como programa independiente en node y fácilmente puede ser incluido en otros programas. REPL proporciona una forma interactiva de ejecutar Javascript y ver los resultados. Puede ser usado en depuración y pruebas. Más información sobre REPL en castellano.

Características generales

NodeJs proporciona un «Javascript sin restricciones» ya que no tenemos que preocuparnos si nuestro código fuente es compatible o no con diferentes navegadores. Lo que se codifique en Node, su funcionamiento será el mismo independientemente del sistema que se conecte. Esto realmente es una característica que afecta a todos los lenguajes del lado del servidor.

La programación asíncrona es otra gran característica. En la mayoría de los lenguajes, cuando ejecutamos línea a línea un código, no se ejecuta la siguiente línea hasta que se procese la primera. En node se crean hilos o threads y subprocesos. Esta es la característica de la programación asíncrona, los hilos permitirán ganar velocidad y parecer que todo se ejecuta a la vez. Se pueden establecer callbacks de finalización de procesos, para notificar ese estado. Son funciones que se ejecutan cuando terminan otras. El uso intensivo de callbacks cuando programamos de forma asíncrona produce un efecto de código piramidal, no deseable, llamándose unas funciones a otras, y creando un código espagueti  adentrándose unas funciones dentro de otras y siendo realmente difícil de seguir, entender o interpretar.

Este efecto se puede solucionar haciendo un esfuerzo para estructurar nuestro código fuente, modularizando las funciones.

La programación orientada a eventos es algo típico en javascript, pero en node es algo diferente. En javascript tenemos objetos «window» y «document» pero en node no existen, ya que estamos al lado del servidor.

Los eventos del lado del servidor son distintos, algún ejemplo:

uncaughtError -> Se genera cuando se produce un error y el proceso no puede continuar

data-> Cuando nos llegan datos por stream o flujos.

request-> Cuando nos llegan datos por URL, similar a otros lenguajes como ASP.

nodejs2

Algunos comandos NodeJS y Hola mundo

En la consola de node se pueden teclear mandatos Javascript.

Ejemplo

$ node 
console.log(«hola mundo»);

Muestra el mensaje Hola mundo en el terminal.

Esta es la completa implementación del «Hola Mundo» como un servidor HTTP en node.js:

var http = require('http');

http.createServer(
  function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hola Mundo\n');
  }
).listen(8000);

console.log('Servidor ejecutándose en http://localhost:8000/');

El siguiente código es un servidor TCP simple que escucha el puerto 7000 y hace un echo de «Hola» sobre la conexión:

var net = require('net');

net.createServer(
  function (stream) {
    stream.write('hola\r\n');

    stream.on( 'end',
      function () {
        stream.end('adios\r\n');
      }
    );

    stream.pipe(stream);
  }
).listen(7000);

 

Eso es todo, una breve introducción a Node.js

Relacionado con el Motor V8, en comic 😉

Salu2.

Ampliaciones:

Instalación de Node en un servidor dedicado linux

No sabemos la distro, pero asumiendo que sea una Debian-like (Debian, Ubuntu, Mint etc) os pongo como compilarlo desde fuentes.

1. Dependencias

sudo apt-get install g++ curl libssl-dev apache2-utils

2.  Instalar git para descarga del source

sudo apt-get install git-core

3. Clonar la repo

sudo mkdir /tmp/compilarnode
cd /tmp/compilarnode
sudo git clone git://github.com/ry/node.git

4. Instalar

cd node
./configure
make
sudo make install

5. Comprobar que todo funciona correctamente

node -v

man node

6. Para instalar paquetes y dependencias de node, existe una utilidad llamada NPM (Node Package Manager), se instalala

curl http://npmjs.org/install.sh | sh

 

 

 

 

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Home Programación Introducción a Node.js
© www.palentino.es, desde el 2012 - Un Blog para compartir conocimientos ...

Uso de cookies en mi sitio palentino.es

Este sitio web utiliza cookies para que tengamos la mejor experiencia de usuario. Si continúas navegando estás dando tu consentimiento para la aceptación de las mencionadas cookies y la aceptación de la política de cookies

ACEPTAR
Aviso de cookies