Documentos de Académico
Documentos de Profesional
Documentos de Cultura
js
Grupo de usuarios Drupal Alicante + @tucamon
07/11/2012
Alessandro Mascherpa
@AlessMascherpa
Introducción a NodeJS @tucamon, 07Nov2012
Personal
● Desarrollador web freelance
http://es.linkedin.com/in/alessmascherpa
● Miembro de la Asociación
Española de Drupal,
http://asociaciondrupal.es/
http://drupal.org/user/395031
● Miembro de la Drupal Association,
https://association.drupal.org/
● Grupo de usuarios de Drupal de
Castellón: @DrupalCS,
http://groups.drupal.org/castellon
Intro
Arquitectura
API
NPM y módulos destacados
Críticas y problemas
Casos de uso
Referencias
Alessandro Mascherpa, @AlessMascherpa 3 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Intro
Arquitectura
API
NPM y módulos destacados
Críticas y problemas
Casos de uso
Referencias
Alessandro Mascherpa, @AlessMascherpa 4 / 42
Introducción a NodeJS @tucamon, 07Nov2012
¿Qué es Node.js?
● Single threaded, event-
loop, non-blocking I/O
● Centrado en la
eficiencia
● SSJS: Server-Side
JavaScript. Google V8.
JavaScript es funcional
y event-driven Ref: http://nodejs.org/
● Super “cool”
¿Qué NO es Node.js?
● No es un fullstack
Web-framework
● No es un servidor
web (ni de otro tipo)
● No es web en tiempo
real
● Pero se puede construir cualquiera de los
anteriores con él
Intro
Arquitectura
API
NPM y módulos destacados
Críticas y problemas
Casos de uso
Referencias
Alessandro Mascherpa, @AlessMascherpa 7 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Ref:
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
Alessandro Mascherpa, @AlessMascherpa 8 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Blocking
Ref:
http://magnetik.github.com/node-webid-report/
Alessandro Mascherpa, @AlessMascherpa 9 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Blocking
<?php
<?php
result
result == query("select...");
query("select...");
//
// esperar
esperar yy usar
usar result
result
?>
?>
Ref:
http://magnetik.github.com/node-webid-report/
Alessandro Mascherpa, @AlessMascherpa 10 / 42
Introducción a NodeJS @tucamon, 07Nov2012
NonBlocking
Ref: http://magnetik.github.com/node-webid-report/
http://www.aaronstannard.com/post/2011/12/14/Intro-to-NodeJS-for-NET-De
Alessandro Mascherpa, @AlessMascherpa 11 / 42
Introducción a NodeJS @tucamon, 07Nov2012
NonBlocking
query("select...",
query("select...", function
function (result)
(result) {{
//
// usa
usa result
result
});
});
//haz
//haz otra
otra cosa
cosa
Ref:
http://magnetik.github.com/node-webid-report/
Alessandro Mascherpa, @AlessMascherpa 12 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Blocking vs NonBlocking
Memoria Event-Loop
T0
T1
T2
T3
T4 Memoria
T5 PH0
PH1
PH2
PH3
PH4
PH5
Recursos
compartidos
Modelo Apache
Blocking vs NonBlocking
Blocking vs NonBlocking
Intro
Arquitectura
API
NPM y módulos destacados
Críticas y problemas
Casos de uso
Referencias
Alessandro Mascherpa, @AlessMascherpa 16 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Ref: http://blog.zenika.com/index.php?post/2011/04/10/NodeJS
Intro
Arquitectura
API
NPM y módulos destacados
Críticas y problemas
Casos de uso
Referencias
Alessandro Mascherpa, @AlessMascherpa 19 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Connect y Express.js
● Connect es un HTTP server framework creado por
Sencha: https://github.com/senchalabs/connect#readme
● Express.js es un sencillo web-framework inspirado en
Sinatra y basado en Connect: http://expressjs.com/
Intro
Arquitectura
API
NPM y módulos destacados
Críticas y problemas
Casos de uso
Referencias
Alessandro Mascherpa, @AlessMascherpa 24 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Críticas vs Visionarios
● Que si el código es ● Hay voces (o más bien
ilegible e inmantenible.. rumores) que piden que
desaparezca PHP por
● Que si tenemos que
que ya no hace falta.
volver a la edad de
Node.js + JavaScript es
piedra de internet y
mucho mejor y mucho
programar el servidor
más elegante...
para cada webapp que
hagamos...
– process.nextTick(callback(){ … });
● Matriosca-style-coding, Boomerang-shape-code
o Callback-hell
Alessandro Mascherpa, @AlessMascherpa 26 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Callback Hell
database.find('foo', function (err, data) {
database.update('foo', 'bar', function (err, data) {
database.delete('bar', function (err, data) {
console.log(data);
});
});
});
Ref: http://stackoverflow.com/questions/5366424/writing-blocking-code-in-nodejs
http://stackoverflow.com/questions/5265743/node-js-what-techniques-are-there-for-w
Alessandro Mascherpa, @AlessMascherpa 28 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Intro
Arquitectura
API
NPM y módulos destacados
Críticas y problemas
Casos de uso
Referencias
Alessandro Mascherpa, @AlessMascherpa 29 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Demo
1.Instalar NodeJS (que ya incluye npm)
2.Instalar Drupal
3.Instalar nodejs module
4.Instalar drupalchat module (que usaremos como
ejemplo) http://drupal.org/project/drupalchat
5.Instalar dependencias de nodejs module (si se diese el
caso tambien tendríamos que instalar las de nuestro
módulo)
Ref: http://drupal.org/node/1713530
Demo 2
6.Copiar nodejs.config.js y
drupalchat_nodejs.server.extension.js de drupalchat a
nodejs, para que esté en el mismo directorio que
server.js
7.Añadir a nodejs.config.js datos de nuestro sistema
Demo 3: Config
path_to_modules/nodejs/nodejs.config.js
settings = {
scheme: 'http', port: 8080, host: 'localhost',
resource: '/socket.io', serviceKey: '',
backend: {
Port: 8082, host: 'nodejs.localhost',
scheme: 'http', basePath: '',
messagePath: '/nodejs/message'
},
debug: true,
extensions: ['drupalchat_nodejs.server.extension.js'],
transports: ['websocket', … ]
};
Alessandro Mascherpa, @AlessMascherpa 35 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Demo 4: Extension
path_to_modules/nodejs/drupalchat_nodejs.server.extension.js
49 .on('client-disconnect', function (sessionId) {
50 for (var user in drupalchat_users) {
51 if(drupalchat_users[user] == sessionId) {
52 ruser = user;
53 break;
54 }
55 }
56 console.log('Out - ' + ruser);
57 delete drupalchat_users[ruser];
58 if(ruser!=0) {
59 for (var user in drupalchat_users) {
60 if(drupalchat_users[user] != sessionId)‹
61 publishMessageToClient(drupalchat_users[user], {type: 'userOffline',
data: ruser, callback: 'drupalchatNodejsMessageHandler'});
62 }
63 }
64 });
Alessandro Mascherpa, @AlessMascherpa 36 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Intro
Arquitectura
API
NPM y módulos destacados
Críticas y problemas
Casos de uso
Referencias
Alessandro Mascherpa, @AlessMascherpa 39 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Referencias
● http://blog.nodejitsu.com/
● http://nodetuts.com/
● http://nodeup.com/
● http://groups.drupal.org/node/121174
● http://behrang.github.com/presentations/node.js/201
● http://www.rmunoz.net/introduccion-a-node-js.html
● http://nodeknockout.com/about
● https://github.com/joyent/node/wiki/Projects,-Applica
Alessandro Mascherpa, @AlessMascherpa 40 / 42
Introducción a NodeJS @tucamon, 07Nov2012
Libros
● Hands on Node:
http://www.packtpub.com/node-javascript-web-development/book
● Node Web Development:
http://nodetuts.com/handson-nodejs-book.html
Alessandro Mascherpa, @AlessMascherpa 41 / 42
Introducción a NodeJS @tucamon, 07Nov2012
¿Preguntas?
Gracias :)
Alessandro Mascherpa
@AlessMascherpa