node + websockets

Una pareja bien avenida

 

¿Quién es este tío?

Alejandro Fernández

Programador / Desarrollador / Ingeniero de software / Sysadmin / DevOps / Cacharreador

Actualmente en MediaSmart Mobile

alejandrofer, alexfernandez, @pinchito

Node.js

JavaScript fue pensado para correr en el navegador...
"Tecnología cliente" corriendo en el servidor...

¡Herejía!

Evolución en servidores web

Apache: multi-hilo / multi-proceso

nginx: master + workers

Python Twisted + Tornado, JavaScript node.js: asíncronos

Programación Funcional al poder

Continuaciones, clausuras, filtros, lambdas…

JavaScript es en realidad ¡un dialecto de Lisp!
        (define factorial
          (lambda (n)
            (if (= n 0) 1
              (* n (factorial (- n 1))))))
(para ser exactos, Scheme)

…disfrazado de Java (o lo que es lo mismo, C)

¿Te sigue pareciendo cool?

Procesamiento asíncrono

Función como parámetro (continuation-passing style)

Callbacks: sin bloqueos, sin polling

¡Mantén esa CPU ocupada!

WebSockets

Una tecnología bastarda en HTML5

TCP/IP es full duplex: recibe y envía

HTML es half-duplex: petición, respuesta

WebSockets al Rescate

Los webSockets recuperan la comunicación a dos bandas
Comunicación asíncrona

¡Se acabó el polling!

Sobrecargando el puerto 80

¿Por qué no usar sockets TCP/IP?

Atravesar el firewall
Fail fast! o long polling

el encuentro


WebSockets en el cliente y el servidor

Rendimiento e inmediatez

Baja latencia

Retos ingenieriles


Un número absurdo de peticiones concurrentes

1000 req/s ~ 5000 req/s por core

100K, 250K, 1M clientes

Aplicaciones

Actualizaciones en tiempo real
Domótica remota
Control remoto de vehículos
Juegos multijugador

Más aplicaciones

Control de flotas
Internet of things
(Pachube ⇨ Cosm)

ECOSISTEMA


npm rules!

Opción popular: socket.io (Cliente + servidor)

Opción básica: websocket

Trucos

Compartir código entre cliente y servidor

Aumentar número de ficheros abiertos

Desactivar el recolector de basura

Pruebas de carga continuas

STOP

Demo Time!

¡Anímate!


Pierde el miedo a cacharrear
Empieza a probar cosas 
Busca ayuda (casi toda en inglés)
¡Practica el inglés!
Pregunta en foros / StackOverflow
Cúrrate los detalles  

Créditos

Fuente:  http://en.wikipedia.org/wiki/File:Train_coupling.jpg
Fuente:   http://commons.wikimedia.org/wiki/File:Geronimo,_Apache_chief_I.png
Fuente:   http://commons.wikimedia.org/wiki/File:Bundesarchiv_Bild_183-11500-0300,_Warnem%C3%BCnde,_Segelschulschiff_%22Wilhelm_Pieck%22,_Indienststellung.jpg
Fuente:   http://en.wikipedia.org/wiki/File:Tesla_polyphase_AC_500hp_generator_at_1893_exposition.jpg  
Fuente:   http://en.wikipedia.org/wiki/File:Portable_radio_SCR536.png
Fuente:   http://commons.wikimedia.org/wiki/File:Derby_Road_-_Freightliner_66572_passing_66538.jpg
Fuente:   http://payingattentiontothesky.com/2011/05/13/reading-selections-from-the-god-of-the-mathematicians-by-david-p-goldman/
Fuente:   http://cs.wikipedia.org/wiki/Soubor:Brooklyn_Bridge_New_York_det.4a18745u.jpg
Fuente:   http://commons.wikimedia.org/wiki/File:Bundesarchiv_Bild_183-W0224-0007,_Berlin,_Volkspark_Friedrichshain,_Tischtennis.jpg
Fuente:   http://en.wikipedia.org/wiki/File:SwarmRobot_org.jpg
Fuente:   http://flaggedrevs.labs.wikimedia.org/wiki/File:YellowstoneBears.jpg
Fuente:   http://en.wikipedia.org/wiki/File:Bundesarchiv_Bild_183-1990-0105-029,_Berlin,_Loch_in_Mauer_am_Reichstag.jpg
Fuente:  http://en.wikipedia.org/wiki/File:HandCuffHarryHoudini.jpg
Fuente:  http://thekelayahobjective.tumblr.com/
Fuente:  http://www.twotsi.com/pages.php?word=immense%20nun%20papal%20visit&act=show