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: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
node websockets
By Alex Fernández
node websockets
- 3,644