SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)PiXeL16
 
Nodejs.introduccion
Nodejs.introduccionNodejs.introduccion
Nodejs.introduccionkillfill
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para TodosMariano Iglesias
 
Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmasZuriel Diaz
 
NodeJS
NodeJSNodeJS
NodeJSIBM
 
Dockeriza tu entorno de desarrollo
Dockeriza tu entorno de desarrolloDockeriza tu entorno de desarrollo
Dockeriza tu entorno de desarrolloMarco Bellido
 
Entorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantEntorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantPau Ferrer Ocaña
 
PDO: Capa de abstracción de base de datos con PHP
PDO: Capa de abstracción de base de datos con PHPPDO: Capa de abstracción de base de datos con PHP
PDO: Capa de abstracción de base de datos con PHPArsys
 
Node.js - un poco de informacion.
Node.js - un poco de informacion.Node.js - un poco de informacion.
Node.js - un poco de informacion.Luis Toscano
 
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphereVagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphereJavier Jerónimo Suárez
 
NodeJS y MongoDB
NodeJS y MongoDBNodeJS y MongoDB
NodeJS y MongoDBArsys
 
Docker meetup :: Kubernetes en Restorando
Docker meetup :: Kubernetes en RestorandoDocker meetup :: Kubernetes en Restorando
Docker meetup :: Kubernetes en RestorandoRestorando
 
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
Virtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y PuppetVirtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y Puppet
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y PuppetRichard Moya
 
Creación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con VagrantCreación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con VagrantCarlos Gimeno Yáñez
 
DevOps & Infraestructura como código: Promesas Rotas
DevOps & Infraestructura como código: Promesas RotasDevOps & Infraestructura como código: Promesas Rotas
DevOps & Infraestructura como código: Promesas RotasRicard Clau
 
Docker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSDocker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSJan Sanchez
 
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónLuis Ruiz Pavón
 

Was ist angesagt? (20)

Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)
 
Nodejs.introduccion
Nodejs.introduccionNodejs.introduccion
Nodejs.introduccion
 
Nodejs
NodejsNodejs
Nodejs
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
 
NodeJS
NodeJSNodeJS
NodeJS
 
Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmas
 
NodeJS
NodeJSNodeJS
NodeJS
 
Dockeriza tu entorno de desarrollo
Dockeriza tu entorno de desarrolloDockeriza tu entorno de desarrollo
Dockeriza tu entorno de desarrollo
 
Entorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantEntorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con Vagrant
 
PDO: Capa de abstracción de base de datos con PHP
PDO: Capa de abstracción de base de datos con PHPPDO: Capa de abstracción de base de datos con PHP
PDO: Capa de abstracción de base de datos con PHP
 
Node.js - un poco de informacion.
Node.js - un poco de informacion.Node.js - un poco de informacion.
Node.js - un poco de informacion.
 
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphereVagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
 
Vagrant
VagrantVagrant
Vagrant
 
NodeJS y MongoDB
NodeJS y MongoDBNodeJS y MongoDB
NodeJS y MongoDB
 
Docker meetup :: Kubernetes en Restorando
Docker meetup :: Kubernetes en RestorandoDocker meetup :: Kubernetes en Restorando
Docker meetup :: Kubernetes en Restorando
 
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
Virtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y PuppetVirtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y Puppet
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
 
Creación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con VagrantCreación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con Vagrant
 
DevOps & Infraestructura como código: Promesas Rotas
DevOps & Infraestructura como código: Promesas RotasDevOps & Infraestructura como código: Promesas Rotas
DevOps & Infraestructura como código: Promesas Rotas
 
Docker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSDocker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJS
 
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
 

Andere mochten auch

Node Js & 3D Printer
Node Js & 3D PrinterNode Js & 3D Printer
Node Js & 3D Printernanusefue
 
#Dean document db + express + angularjs + nodejs running on azure
#Dean document db + express + angularjs + nodejs running on azure#Dean document db + express + angularjs + nodejs running on azure
#Dean document db + express + angularjs + nodejs running on azureLuis Ruiz Pavón
 
El Javascripto y los Emuladores de la Muerte
El Javascripto y los Emuladores de la MuerteEl Javascripto y los Emuladores de la Muerte
El Javascripto y los Emuladores de la MuerteFernando Larrañaga
 
Introducción a ReactJS
Introducción a ReactJSIntroducción a ReactJS
Introducción a ReactJSEduard Tomàs
 
Frontend Web Parte 3 Usabilidad
Frontend Web Parte 3 UsabilidadFrontend Web Parte 3 Usabilidad
Frontend Web Parte 3 UsabilidadToni Martin Avila
 
Robert kiyosaki el cuadrante del flujo de dinero
Robert kiyosaki el cuadrante del flujo de dineroRobert kiyosaki el cuadrante del flujo de dinero
Robert kiyosaki el cuadrante del flujo de dineroNicanor Manzanarez
 
El negocio-del-siglo-xxi-robert-kiyosaki
El negocio-del-siglo-xxi-robert-kiyosakiEl negocio-del-siglo-xxi-robert-kiyosaki
El negocio-del-siglo-xxi-robert-kiyosakiSantiago Pereyra
 
Sql Saturday CR - Introducción al Optimizador
Sql Saturday CR - Introducción al OptimizadorSql Saturday CR - Introducción al Optimizador
Sql Saturday CR - Introducción al OptimizadorJOSE AHIAS LOPEZ PORTILLO
 
Fundamentos sobre los Bloqueos en SQL Server
Fundamentos sobre los Bloqueos en SQL ServerFundamentos sobre los Bloqueos en SQL Server
Fundamentos sobre los Bloqueos en SQL ServerKike Puig
 
24 HOP edición Español - Fundamentos de los bloqueos en sql server enrique ...
24 HOP edición Español - Fundamentos de los bloqueos en sql server   enrique ...24 HOP edición Español - Fundamentos de los bloqueos en sql server   enrique ...
24 HOP edición Español - Fundamentos de los bloqueos en sql server enrique ...SpanishPASSVC
 
Scio Talks - Gobierna el Frontend 1er parte
Scio Talks - Gobierna el Frontend 1er parteScio Talks - Gobierna el Frontend 1er parte
Scio Talks - Gobierna el Frontend 1er parteScio Consulting
 
24 HOP edición Español - Durabilidad diferida de transacciones y mejoras en g...
24 HOP edición Español - Durabilidad diferida de transacciones y mejoras en g...24 HOP edición Español - Durabilidad diferida de transacciones y mejoras en g...
24 HOP edición Español - Durabilidad diferida de transacciones y mejoras en g...SpanishPASSVC
 
Sql Server - Troubleshooting De Bloqueos (Parte I)
Sql Server - Troubleshooting De Bloqueos (Parte I)Sql Server - Troubleshooting De Bloqueos (Parte I)
Sql Server - Troubleshooting De Bloqueos (Parte I)JOSE AHIAS LOPEZ PORTILLO
 
INTERBLOQUEOS Y NIVELES DE AISLAMIENTO
INTERBLOQUEOS Y NIVELES DE AISLAMIENTOINTERBLOQUEOS Y NIVELES DE AISLAMIENTO
INTERBLOQUEOS Y NIVELES DE AISLAMIENTOjuan
 
Multiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de cssMultiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de cssLeonidas Esteban González
 
Curso de javascript y node avanzado
Curso de javascript y node avanzadoCurso de javascript y node avanzado
Curso de javascript y node avanzadobrainybogota
 
Mejoras del lenguaje T-SQL 2012 (parte 1) | SolidQ Summit 2012
Mejoras del lenguaje T-SQL 2012 (parte 1) | SolidQ Summit 2012Mejoras del lenguaje T-SQL 2012 (parte 1) | SolidQ Summit 2012
Mejoras del lenguaje T-SQL 2012 (parte 1) | SolidQ Summit 2012SolidQ
 

Andere mochten auch (20)

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

Ähnlich wie Introducción a Node.js

24. Introducción a Node JS.pdf
24. Introducción a Node JS.pdf24. Introducción a Node JS.pdf
24. Introducción a Node JS.pdfmabytax
 
Node para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoNode para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoMicael Gallego
 
Node on Windows jsconf arg 2012
Node on Windows jsconf arg 2012Node on Windows jsconf arg 2012
Node on Windows jsconf arg 2012Matias Woloski
 
ASP.NET vNext... Desarrollo cross platform
ASP.NET vNext... Desarrollo cross platformASP.NET vNext... Desarrollo cross platform
ASP.NET vNext... Desarrollo cross platformEduard Tomàs
 
Presentacion taller de programacion
Presentacion taller de programacionPresentacion taller de programacion
Presentacion taller de programacionSaulSoto19
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispanohdgarcia
 
Explorando Mi Trayectoria: una Entrevista Exclusiva
Explorando Mi Trayectoria: una Entrevista ExclusivaExplorando Mi Trayectoria: una Entrevista Exclusiva
Explorando Mi Trayectoria: una Entrevista ExclusivaDennys José Márquez Reyes
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.jsINSIGNIA4U
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Ignacio Muñoz Vicente
 
Frameworks y herramientas para la web del futuro
Frameworks y herramientas para la web del futuroFrameworks y herramientas para la web del futuro
Frameworks y herramientas para la web del futuroBBVA API Market
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.betabeers
 
Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014Carlos Camacho
 

Ähnlich wie Introducción a Node.js (20)

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

Mehr von Alessandro Mascherpa

Mehr von Alessandro Mascherpa (7)

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

Kürzlich hochgeladen

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Kürzlich hochgeladen (10)

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

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