SlideShare una empresa de Scribd logo
Introducción a Node.js
Grupo de usuarios Drupal Alicante + @tucamon

07/11/2012




http://vimeo.com/53137688

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


Alessandro Mascherpa, @AlessMascherpa                         2/   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                 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”

Alessandro Mascherpa, @AlessMascherpa                  5/   42
Introducción a NodeJS                   @tucamon, 07Nov2012


¿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


Alessandro Mascherpa, @AlessMascherpa                 6/   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                 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 = query("select...");
             result = query("select...");
             // esperar y usar result
             // esperar y usar 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...", function (result) {
      query("select...", function (result) {
          // usa result
           // usa result
     });
      });
     //haz otra cosa
      //haz otra 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

Alessandro Mascherpa, @AlessMascherpa                13 /    42
Introducción a NodeJS                   @tucamon, 07Nov2012


Blocking vs NonBlocking




Alessandro Mascherpa, @AlessMascherpa                14 /   42
Introducción a NodeJS                   @tucamon, 07Nov2012


Blocking vs NonBlocking




Alessandro Mascherpa, @AlessMascherpa                15 /   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                16 /   42
Introducción a NodeJS                                @tucamon, 07Nov2012


La API de Node.js: extendiendo JS
 ●   Procesos
 ●   Filesystem
 ●   Networking
 ●   Utilidades
 http://nodejs.org/api/


                            Ref: http://blog.zenika.com/index.php?post/2011/04/10/NodeJS




Alessandro Mascherpa, @AlessMascherpa                                        17 /    42
Introducción a NodeJS                   @tucamon, 07Nov2012


Node.js Hello World: Simple Servidor HTTP

var http = require('http');


http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Worldn');
}).listen(1337, "127.0.0.1");


console.log('Server running http://127.0.0.1:1337/');




Alessandro Mascherpa, @AlessMascherpa                18 /   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                19 /   42
Introducción a NodeJS                          @tucamon, 07Nov2012


Node Package Manager: npm
 ●   Repositorio de módulos
                                $ npm list
     Node.js
 ●   Gestiona instalación,                     connect@1.7.0
     actualización ... de                         qs@0.3.1
     módulos Node.js                              mime@1.2.3
 ●   Node.js permite la                        express@1.0.7
     coexistencia de diferentes                   connect@1.7.0
     versiones de un módulo en                       qs@0.3.1
     el sistema.                                     mime@1.2.2
                                                  qs@0.3.1
 ●   NPM incluido en Node.js
     desde la versión 0.6.x       Ref: http://npmjs.org/
Alessandro Mascherpa, @AlessMascherpa                       20 /   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/

  var app = require('express').createServer();
  app.get('/', function(req, res){
    res.send('hello world');
  });
  app.listen(3000);


Alessandro Mascherpa, @AlessMascherpa                       21 /   42
Introducción a NodeJS                   @tucamon, 07Nov2012
var express = require('express');
var app = express.createServer(express.logger());
app.register('.html', require('ejs'));
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.configure(function(){
  app.use(app.router);
  app.use(express.static(__dirname + '/filez'));
});
app.get('/', function(req, res) {
    res.render('home.html', { title: "Math Wizard" });
});
app.get('/404', function(req, res) {
  res.send('NOT FOUND '+req.url);
});
app.listen(8124);
console.log('listening to http://localhost:8124');

Alessandro Mascherpa, @AlessMascherpa                22 /   42
Introducción a NodeJS                              @tucamon, 07Nov2012


Otros módulos destacados
 ●   Underscore
 ●   CoffeScript
 ●   Socket.io, Now.js...
 ●   Mustache.js, Jade...
 ●   Cluster (parte de core desde 0.6.x)
 ●   Expresso, Jasmine, Cucumber.js, Mocha, Zombi...
 ●   Mongoose, Node-mysql, Node-sqlite3...
     Refs: http://search.npmjs.org/
     https://github.com/joyent/node/wiki/modules

Alessandro Mascherpa, @AlessMascherpa                           23 /   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                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...

          ●   … cada herramienta tiene su ámbito de
              aplicación donde destaca. Suerte que
              tenemos opciones.
Alessandro Mascherpa, @AlessMascherpa                    25 /   42
Introducción a NodeJS                       @tucamon, 07Nov2012


Problemas con Node.js
 ●   Procesos largos de cálculo. Soluciones:
     ●   Refactorizar el algoritmo:

         –   process.nextTick(callback(){ … });


     ●   Crear un servicio de backend y desviar el cálculo.

 ●   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);
      });
  });
});




Alessandro Mascherpa, @AlessMascherpa                 27 /   42
Introducción a NodeJS                                 @tucamon, 07Nov2012


Solucionando el CallBack Hell
 ●   Código orientado a             var onDelete = function (err,
     eventos y funciones            data) {console.log(data);},
     con nombre en lugar            onUpdate = function (err, data)
     de funciones                   {database.delete('bar',
     anónimas                       onDelete);},
 ●   Usando módulos que             onFind = function (err, data)
     abstraigan la                  {database.update('foo', 'bar',
                                    onUpdate);};
     serialización y
     concurrencia de la             database.find('foo', onFind);
     ejecución de callbacks

  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


Casos de uso de Node.js en la web
 ●   Comunicaciones
 ●   Streaming
 ●   Colaboración
 ●   Juegos online
 ●   Monitorización
     … en definitiva aplicaciones de red tiempo real,
     pero también...
 ●   Servidores web eficientes
 ●   Aplicaciones de escritorio y de consola
Alessandro Mascherpa, @AlessMascherpa                30 /   42
Introducción a NodeJS                   @tucamon, 07Nov2012


¿Qué tiene que ver Node.js con Drupal?
 ●   Drupal es una gran plataforma de desarrollo
     web.
 ●   Pero Drupal es pesado a nivel de proceso y
     recursos.
 ●   Drupal se integra con Node.js para evitar esos
     handicaps con aplicaciones que requieran
     tiempo real.



Alessandro Mascherpa, @AlessMascherpa                31 /   42
Introducción a NodeJS                               @tucamon, 07Nov2012


Casos de uso Node.js en Drupal
 ●   Node.js Integration by beejeebus (Justin
     Randell): Drupal gestiona los datos y Node.js
     las comunicaciones entre clientes.
     http://drupal.org/project/nodejs
     http://2011.badcamp.net/program/sessions/drupal-and-nodejs
 ●   Nodepal by synodinos (Dionysios G.
     Synodinos): aplicación Node.js con acceso de
     lectura a la base de datos Drupal (sin pasar por
     Drupal) https://github.com/synodinos/nodepal
 ●   Tareas repetitivas y frequentes:
     http://fourkitchens.com/blog/2012/02/07/nodejs-drupal
Alessandro Mascherpa, @AlessMascherpa                            32 /   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

Alessandro Mascherpa, @AlessMascherpa                33 /   42
Introducción a NodeJS                   @tucamon, 07Nov2012


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




Alessandro Mascherpa, @AlessMascherpa                34 /   42
Introducción a NodeJS                    @tucamon, 07Nov2012


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


Demo 5: Event emit
path_to_modules/nodejs/server.js

1100 socket.on('disconnect', function () {
1101 process.emit('client-disconnect', socket.id);
1102 cleanupSocket(socket);
1103 });




Alessandro Mascherpa, @AlessMascherpa                37 /   42
Introducción a NodeJS                               @tucamon, 07Nov2012


  Demo 6: NodeJS module API
  path_to_modules/nodejs/server.js
391 /**
392 * Publish a message to a specific client.
393 */
394 var publishMessageToClient = function (sessionId, message) {
395 if (io.sockets.sockets[sessionId]) {
396 io.sockets.socket(sessionId).json.send(message);
397 if (settings.debug) {
398     console.log('Sent message to client ' + sessionId);
399 }
400 return true;
401 }
402 else {
403 console.log('publishMessageToClient: Failed to find client ' + sessionId);
404 }
405 };
 Alessandro Mascherpa, @AlessMascherpa                               38 / 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


Alessandro Mascherpa, @AlessMascherpa                  42 /   42

Más contenido relacionado

PDF
Introducción a Node.js
PPTX
Introduccion a Nodejs
PDF
Introducción a NodeJS
PPTX
Introducción Nodejs
PDF
Curso node.js
PPTX
Introduccion a Node.js
KEY
Introducción a NodeJS
PPTX
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
Introducción a Node.js
Introduccion a Nodejs
Introducción a NodeJS
Introducción Nodejs
Curso node.js
Introduccion a Node.js
Introducción a NodeJS
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012

La actualidad más candente (20)

PPTX
Node JS (Francisco Cerdas)
PPT
Nodejs.introduccion
ODP
Node.js - Eventos para Todos
PPTX
PDF
Rompiendo paradigmas
PPTX
NodeJS
 
PDF
Dockeriza tu entorno de desarrollo
PDF
Entorno de desarrollo rápido con Vagrant
PDF
PDO: Capa de abstracción de base de datos con PHP
PPTX
Node.js - un poco de informacion.
PDF
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
PDF
NodeJS y MongoDB
PDF
Docker meetup :: Kubernetes en Restorando
ODP
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
PDF
Creación de entornos de desarrollo con Vagrant
PDF
DevOps & Infraestructura como código: Promesas Rotas
PDF
Docker orientado al desarrollo de aplicaciones con NodeJS
PPTX
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
Node JS (Francisco Cerdas)
Nodejs.introduccion
Node.js - Eventos para Todos
Rompiendo paradigmas
NodeJS
 
Dockeriza tu entorno de desarrollo
Entorno de desarrollo rápido con Vagrant
PDO: Capa de abstracción de base de datos con PHP
Node.js - un poco de informacion.
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
NodeJS y MongoDB
Docker meetup :: Kubernetes en Restorando
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
Creación de entornos de desarrollo con Vagrant
DevOps & Infraestructura como código: Promesas Rotas
Docker orientado al desarrollo de aplicaciones con NodeJS
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
Publicidad

Destacado (20)

PDF
Node Js & 3D Printer
PPTX
#Dean document db + express + angularjs + nodejs running on azure
PDF
El Javascripto y los Emuladores de la Muerte
PPTX
Introducción a ReactJS
PDF
Frontend Web Parte 3 Usabilidad
PDF
Robert kiyosaki el cuadrante del flujo de dinero
PDF
Frontend Web Parte 1
PDF
El negocio-del-siglo-xxi-robert-kiyosaki
PDF
Instalación FrontEnd
PPTX
Sql Saturday CR - Introducción al Optimizador
PPTX
Fundamentos sobre los Bloqueos en SQL Server
PPTX
24 HOP edición Español - Fundamentos de los bloqueos en sql server enrique ...
PPTX
Scio Talks - Gobierna el Frontend 1er parte
PPTX
24 HOP edición Español - Durabilidad diferida de transacciones y mejoras en g...
PPTX
Sql Server - Troubleshooting De Bloqueos (Parte I)
PPT
INTERBLOQUEOS Y NIVELES DE AISLAMIENTO
PDF
Multiplica tu productividad usando un preprocesador de css
PPTX
Curso de javascript y node avanzado
PDF
Servidor API REST con Node.js
PDF
Mejoras del lenguaje T-SQL 2012 (parte 1) | SolidQ Summit 2012
Node Js & 3D Printer
#Dean document db + express + angularjs + nodejs running on azure
El Javascripto y los Emuladores de la Muerte
Introducción a ReactJS
Frontend Web Parte 3 Usabilidad
Robert kiyosaki el cuadrante del flujo de dinero
Frontend Web Parte 1
El negocio-del-siglo-xxi-robert-kiyosaki
Instalación FrontEnd
Sql Saturday CR - Introducción al Optimizador
Fundamentos sobre los Bloqueos en SQL Server
24 HOP edición Español - Fundamentos de los bloqueos en sql server enrique ...
Scio Talks - Gobierna el Frontend 1er parte
24 HOP edición Español - Durabilidad diferida de transacciones y mejoras en g...
Sql Server - Troubleshooting De Bloqueos (Parte I)
INTERBLOQUEOS Y NIVELES DE AISLAMIENTO
Multiplica tu productividad usando un preprocesador de css
Curso de javascript y node avanzado
Servidor API REST con Node.js
Mejoras del lenguaje T-SQL 2012 (parte 1) | SolidQ Summit 2012
Publicidad

Similar a Introducción a Node.js (20)

PDF
24. Introducción a Node JS.pdf
PDF
Node para Javeros: Conoce a tu enemigo
PPTX
Node on Windows jsconf arg 2012
PPTX
ASP.NET vNext... Desarrollo cross platform
PDF
Tecnologias emergentes node js
PDF
Semana 2 Configuración entorno de desarrollo
PPTX
Presentacion taller de programacion
PPT
Node js Alt.net Hispano
PDF
Explorando Mi Trayectoria: una Entrevista Exclusiva
PPTX
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
PDF
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
PDF
Code Blast 2012 - Node.js
PDF
Desarrollo de aplicaciones multiplataforma 2/2
PDF
Introducción a ROS
PPTX
Yo solo te pedí un plátano
PPTX
4.0.0 is the new 1.0
PPTX
MEAN Stack
PDF
Frameworks y herramientas para la web del futuro
PPTX
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
ODP
Web framework ligeros y micros en java barcamp 2014
24. Introducción a Node JS.pdf
Node para Javeros: Conoce a tu enemigo
Node on Windows jsconf arg 2012
ASP.NET vNext... Desarrollo cross platform
Tecnologias emergentes node js
Semana 2 Configuración entorno de desarrollo
Presentacion taller de programacion
Node js Alt.net Hispano
Explorando Mi Trayectoria: una Entrevista Exclusiva
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
Code Blast 2012 - Node.js
Desarrollo de aplicaciones multiplataforma 2/2
Introducción a ROS
Yo solo te pedí un plátano
4.0.0 is the new 1.0
MEAN Stack
Frameworks y herramientas para la web del futuro
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Web framework ligeros y micros en java barcamp 2014

Más de Alessandro Mascherpa (7)

PDF
Drupal7 site buildingesue_3
PDF
Curso Drupal 7 SiteBuilding parte 2
PDF
Curso Drupal7 SiteBuilding parte 1
PDF
Drupal8 Symfony2 en DrupalCS
PDF
Desarrollo de módulos para Drupal
PDF
Drupal User Points. MicroCharla marzo 2012
PDF
Drupal Sitebuilding 101
Drupal7 site buildingesue_3
Curso Drupal 7 SiteBuilding parte 2
Curso Drupal7 SiteBuilding parte 1
Drupal8 Symfony2 en DrupalCS
Desarrollo de módulos para Drupal
Drupal User Points. MicroCharla marzo 2012
Drupal Sitebuilding 101

Último (20)

PDF
Diapositiva proyecto de vida, materia catedra
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PDF
Calidad desde el Docente y la mejora continua .pdf
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
CyberOps Associate - Cisco Networking Academy
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
SAP Transportation Management para LSP, TM140 Col18
PDF
Maste clas de estructura metálica y arquitectura
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Influencia-del-uso-de-redes-sociales.pdf
PDF
Estrategia de apoyo tecnología miguel angel solis
Diapositiva proyecto de vida, materia catedra
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
Propuesta BKP servidores con Acronis1.pptx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Calidad desde el Docente y la mejora continua .pdf
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
Power Point Nicolás Carrasco (disertación Roblox).pptx
Presentación PASANTIAS AuditorioOO..pptx
Plantilla para Diseño de Narrativas Transmedia.pdf
REDES INFORMATICAS REDES INFORMATICAS.pptx
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
CyberOps Associate - Cisco Networking Academy
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
SAP Transportation Management para LSP, TM140 Col18
Maste clas de estructura metálica y arquitectura
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Influencia-del-uso-de-redes-sociales.pdf
Estrategia de apoyo tecnología miguel angel solis

Introducción a Node.js

  • 1. Introducción a Node.js Grupo de usuarios Drupal Alicante + @tucamon 07/11/2012 http://vimeo.com/53137688 Alessandro Mascherpa @AlessMascherpa
  • 2. 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 Alessandro Mascherpa, @AlessMascherpa 2/ 42
  • 3. 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 3/ 42
  • 4. 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
  • 5. 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” Alessandro Mascherpa, @AlessMascherpa 5/ 42
  • 6. Introducción a NodeJS @tucamon, 07Nov2012 ¿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 Alessandro Mascherpa, @AlessMascherpa 6/ 42
  • 7. 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 7/ 42
  • 8. 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
  • 9. Introducción a NodeJS @tucamon, 07Nov2012 Blocking Ref: http://magnetik.github.com/node-webid-report/ Alessandro Mascherpa, @AlessMascherpa 9/ 42
  • 10. Introducción a NodeJS @tucamon, 07Nov2012 Blocking <?php <?php result = query("select..."); result = query("select..."); // esperar y usar result // esperar y usar result ?> ?> Ref: http://magnetik.github.com/node-webid-report/ Alessandro Mascherpa, @AlessMascherpa 10 / 42
  • 11. 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
  • 12. Introducción a NodeJS @tucamon, 07Nov2012 NonBlocking query("select...", function (result) { query("select...", function (result) { // usa result // usa result }); }); //haz otra cosa //haz otra cosa Ref: http://magnetik.github.com/node-webid-report/ Alessandro Mascherpa, @AlessMascherpa 12 / 42
  • 13. 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 Alessandro Mascherpa, @AlessMascherpa 13 / 42
  • 14. Introducción a NodeJS @tucamon, 07Nov2012 Blocking vs NonBlocking Alessandro Mascherpa, @AlessMascherpa 14 / 42
  • 15. Introducción a NodeJS @tucamon, 07Nov2012 Blocking vs NonBlocking Alessandro Mascherpa, @AlessMascherpa 15 / 42
  • 16. 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 16 / 42
  • 17. Introducción a NodeJS @tucamon, 07Nov2012 La API de Node.js: extendiendo JS ● Procesos ● Filesystem ● Networking ● Utilidades http://nodejs.org/api/ Ref: http://blog.zenika.com/index.php?post/2011/04/10/NodeJS Alessandro Mascherpa, @AlessMascherpa 17 / 42
  • 18. Introducción a NodeJS @tucamon, 07Nov2012 Node.js Hello World: Simple Servidor HTTP var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Worldn'); }).listen(1337, "127.0.0.1"); console.log('Server running http://127.0.0.1:1337/'); Alessandro Mascherpa, @AlessMascherpa 18 / 42
  • 19. 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 19 / 42
  • 20. Introducción a NodeJS @tucamon, 07Nov2012 Node Package Manager: npm ● Repositorio de módulos $ npm list Node.js ● Gestiona instalación, connect@1.7.0 actualización ... de qs@0.3.1 módulos Node.js mime@1.2.3 ● Node.js permite la express@1.0.7 coexistencia de diferentes connect@1.7.0 versiones de un módulo en qs@0.3.1 el sistema. mime@1.2.2 qs@0.3.1 ● NPM incluido en Node.js desde la versión 0.6.x Ref: http://npmjs.org/ Alessandro Mascherpa, @AlessMascherpa 20 / 42
  • 21. 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/ var app = require('express').createServer(); app.get('/', function(req, res){ res.send('hello world'); }); app.listen(3000); Alessandro Mascherpa, @AlessMascherpa 21 / 42
  • 22. Introducción a NodeJS @tucamon, 07Nov2012 var express = require('express'); var app = express.createServer(express.logger()); app.register('.html', require('ejs')); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.configure(function(){ app.use(app.router); app.use(express.static(__dirname + '/filez')); }); app.get('/', function(req, res) { res.render('home.html', { title: "Math Wizard" }); }); app.get('/404', function(req, res) { res.send('NOT FOUND '+req.url); }); app.listen(8124); console.log('listening to http://localhost:8124'); Alessandro Mascherpa, @AlessMascherpa 22 / 42
  • 23. Introducción a NodeJS @tucamon, 07Nov2012 Otros módulos destacados ● Underscore ● CoffeScript ● Socket.io, Now.js... ● Mustache.js, Jade... ● Cluster (parte de core desde 0.6.x) ● Expresso, Jasmine, Cucumber.js, Mocha, Zombi... ● Mongoose, Node-mysql, Node-sqlite3... Refs: http://search.npmjs.org/ https://github.com/joyent/node/wiki/modules Alessandro Mascherpa, @AlessMascherpa 23 / 42
  • 24. 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 24 / 42
  • 25. 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... ● … cada herramienta tiene su ámbito de aplicación donde destaca. Suerte que tenemos opciones. Alessandro Mascherpa, @AlessMascherpa 25 / 42
  • 26. Introducción a NodeJS @tucamon, 07Nov2012 Problemas con Node.js ● Procesos largos de cálculo. Soluciones: ● Refactorizar el algoritmo: – process.nextTick(callback(){ … }); ● Crear un servicio de backend y desviar el cálculo. ● Matriosca-style-coding, Boomerang-shape-code o Callback-hell Alessandro Mascherpa, @AlessMascherpa 26 / 42
  • 27. 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); }); }); }); Alessandro Mascherpa, @AlessMascherpa 27 / 42
  • 28. Introducción a NodeJS @tucamon, 07Nov2012 Solucionando el CallBack Hell ● Código orientado a var onDelete = function (err, eventos y funciones data) {console.log(data);}, con nombre en lugar onUpdate = function (err, data) de funciones {database.delete('bar', anónimas onDelete);}, ● Usando módulos que onFind = function (err, data) abstraigan la {database.update('foo', 'bar', onUpdate);}; serialización y concurrencia de la database.find('foo', onFind); ejecución de callbacks 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
  • 29. 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
  • 30. Introducción a NodeJS @tucamon, 07Nov2012 Casos de uso de Node.js en la web ● Comunicaciones ● Streaming ● Colaboración ● Juegos online ● Monitorización … en definitiva aplicaciones de red tiempo real, pero también... ● Servidores web eficientes ● Aplicaciones de escritorio y de consola Alessandro Mascherpa, @AlessMascherpa 30 / 42
  • 31. Introducción a NodeJS @tucamon, 07Nov2012 ¿Qué tiene que ver Node.js con Drupal? ● Drupal es una gran plataforma de desarrollo web. ● Pero Drupal es pesado a nivel de proceso y recursos. ● Drupal se integra con Node.js para evitar esos handicaps con aplicaciones que requieran tiempo real. Alessandro Mascherpa, @AlessMascherpa 31 / 42
  • 32. Introducción a NodeJS @tucamon, 07Nov2012 Casos de uso Node.js en Drupal ● Node.js Integration by beejeebus (Justin Randell): Drupal gestiona los datos y Node.js las comunicaciones entre clientes. http://drupal.org/project/nodejs http://2011.badcamp.net/program/sessions/drupal-and-nodejs ● Nodepal by synodinos (Dionysios G. Synodinos): aplicación Node.js con acceso de lectura a la base de datos Drupal (sin pasar por Drupal) https://github.com/synodinos/nodepal ● Tareas repetitivas y frequentes: http://fourkitchens.com/blog/2012/02/07/nodejs-drupal Alessandro Mascherpa, @AlessMascherpa 32 / 42
  • 33. 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 Alessandro Mascherpa, @AlessMascherpa 33 / 42
  • 34. Introducción a NodeJS @tucamon, 07Nov2012 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 Alessandro Mascherpa, @AlessMascherpa 34 / 42
  • 35. Introducción a NodeJS @tucamon, 07Nov2012 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
  • 36. 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
  • 37. Introducción a NodeJS @tucamon, 07Nov2012 Demo 5: Event emit path_to_modules/nodejs/server.js 1100 socket.on('disconnect', function () { 1101 process.emit('client-disconnect', socket.id); 1102 cleanupSocket(socket); 1103 }); Alessandro Mascherpa, @AlessMascherpa 37 / 42
  • 38. Introducción a NodeJS @tucamon, 07Nov2012 Demo 6: NodeJS module API path_to_modules/nodejs/server.js 391 /** 392 * Publish a message to a specific client. 393 */ 394 var publishMessageToClient = function (sessionId, message) { 395 if (io.sockets.sockets[sessionId]) { 396 io.sockets.socket(sessionId).json.send(message); 397 if (settings.debug) { 398 console.log('Sent message to client ' + sessionId); 399 } 400 return true; 401 } 402 else { 403 console.log('publishMessageToClient: Failed to find client ' + sessionId); 404 } 405 }; Alessandro Mascherpa, @AlessMascherpa 38 / 42
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. Introducción a NodeJS @tucamon, 07Nov2012 ¿Preguntas? Gracias :) Alessandro Mascherpa @AlessMascherpa Alessandro Mascherpa, @AlessMascherpa 42 / 42