Hay una presentacion disponible, desea ingresar a verla?

La presentacion ha terminado.

La clave es ...


Javascript del lado del servidor usando Node.js


Daniel Aristizabal Romero [cronopio]

Nodejitsu Inc.
aristizabal.daniel@gmail.com
@cronopio2
gplus.to/cronopio
github.com/cronopio

¿Node.js?

¿Qué es Node.JS?


Entorno de programación orientado a eventos[1], pensado para construir programas de red rápidos y escalables, con modelos de entrada/salida sin bloqueo[2]que hacen liviano y eficiente el entorno. Perfecto para aplicaciones en tiempo real y de datos intensivos.

Mas Info: [1],[2]

¿Y quién usa Node.js?

En la industria.


Grandes compañias como...

Announcing ql.ioHow LinkedIn used Node.js and HTML5 to build a better, faster apphttps://www.uber.com/

En la industria.


Grandes compañias como...

Walmart Labs y Spumko la division de Node.js en Walmart LabsFebrero 28 nodeday.com patrocinado por PaypalEl backend de su aplicación movil es Node.js
Más Casos de Exito en empresas

En la industria.


Compañias un poco menos conocidas...

ESPERA!!
¿JS en Server-side?
WTF?!

Si!, Gracias a V8
y a Joyent ;)

Orientado a Eventos.

Bloqueo de I/O


Muchas aplicaciones web tienen código como este:

var $r = db.query('select * from T');
// puedo usar el $r
echo $r

Programación Estructurada.

¿Y qué hace el software mientras se hacen las consultas a la base de datos?

En la mayoría de casos...
sólo esperar la respuesta.

Non-blocking de I/O


En el mundo de javascript el código luciría algo como:

db.query('select * from T', function (r) {
// puedo usar el r
alert(r);
});
// el flujo del programa sigue
alert('Hola Mundo');

Programación controlada por eventos (event-driven).

El buen software puede ser
multi-tarea.

Otros hilos de ejecución pueden correr mientras esperan.

¿Es lo mejor que podemos hacer?

Démosle una mirada a Apache y Nginx

Apache vs Nginx


Memoria RAM vs Conexiones Concurrentes

Fuentes: [1]

Apache vs Nginx


¿La diferencia?

Concurrencia de hilos


Código como este:

var r = db.query('select * from T');

Bloquea el proceso entero o implica la ejecución de pilas de tareas.

Concurrencia por Eventos


Pero código como este:

db.query("select ...", function(r) {
// uso el r
});

Permite al programa regresar al bucle de eventos inmediatamente.

... y no necesita nada más.

Asi es como debe hacerse la entrada/salida (I/O)

...mmm ¿bucle de eventos?, me suena a...
JavaScript!

JavaScript


JavaScript esta especialmente diseñado para ser usado como un bucle de eventos (event loop):

Volvamos a Node.JS...

Stack


Instalación.
(en gnu/linux)

Instalación


Dependencias:

Instalación


Debian:

root@host: ~ # echo deb http://ftp.us.debian.org/debian/ sid main > /etc/apt/sources.list.d/sid.list
root@host: ~ # apt-get update
root@host: ~ # apt-get install nodejs npm
### Opcional (y obligatorio para algunos modulos)
root@host: ~ # apt-get install build-essential # Herramientas de compilación root@host: ~ # apt-get install nodejs-dev # Codigo de nodejs

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
### De nuevo, opcional (y obligatorio para algunos modulos)
sudo apt-get install build-essential # Herramientas de compilación sudo apt-get install nodejs-dev # Codigo de nodejs

Instalación


Para mas distribuciones y/o sistemas operativos revise la wiki de node.

¿Windows?

Para Windows cada vez son mas grandes los esfuerzos para que funcione bien, pero node.js tiene algunos principios bastante ligados con los Unix modernos.

¿MacOSX?

Instalador Oficial.

Instalación


Descargando las fuentes:

Usando Git.

git clone git://github.com/joyent/node.git
cd node/
git checkout v0.6.15

Descargando un tarball.

wget -c https://github.com/joyent/node/tarball/v0.6.15 -O node-0.6.15.tar.gz
tar zxvf node-0.6.15.tar.gz
cd joyent-node-d90d46f/
Guía de Instalación Oficial - Script para instalación en Ubuntu.

Instalación


Construcción:

Como usuario sin privilegios.

mkdir ~/local
./configure --prefix=~/local
make -j2 # dependiendo del numero de cores.
make install
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

Como root.

su -
./configure
make -j2 # dependiendo del numero de cores.
make install

Instalación


Node Package Manager (NPM)

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

Instalando módulos o paquetes.

de manera local

npm install express

de manera global

npm install -g express
Página NPM

Ok, ¿y ahora?

Ecosistema de Módulos


Busqueda en search.npmjs.org

O usando CLI (9101 paquetes registrados.)

npm search hook.io   # tema o tag a buscar

Paquetes más usados.

Ecosistema de Módulos


node-toolbox

El node-toolbox es un sitio donde podemos encontrar los paquetes registrados en NPM ordenados por categorías. También tiene links a sitios de interés y listados por popularidad de paquetes. La aplicación está desplegada en lasSmart Machines de Joyent y su url es:toolbox.no.de

Wiki de Node

El wiki de node tiene un listado de módulos compatibles con node.js.

node.js module rankings

Listado de modulos de node.js ordenados por su ranking.

¿Más Preguntas?

Demos!!!
:-)

Hola Mundo.


Callback

Socket TCP


Servidor

Cliente

telnet localhost 8000

Consulta de dominios.


Servidor

Cliente

telnet localhost 8000
ip fcbosque.org
salir

Servidor Web


Servidor

Cliente

http://localhost:4000/
Fork me on GitHub

Gracias!!

Daniel Aristizabal Romero


Laboratorio Tecnológico Fundación Casa del Bosque

aristizabal.daniel@gmail.com - gplus.to/cronopio - @cronopio2

/