Introducción a Node.jsGrupo de usuarios Drupal Alicante + @tucamon07/11/2012http://vimeo.com/53137688Alessandro Mascherpa@...
Introducción a NodeJS                           @tucamon, 07Nov2012Personal ●   Desarrollador web freelance     http://es....
Introducción a NodeJS                   @tucamon, 07Nov2012  Intro  Arquitectura  API  NPM y módulos destacados  Críticas ...
Introducción a NodeJS                   @tucamon, 07Nov2012  Intro  Arquitectura  API  NPM y módulos destacados  Críticas ...
Introducción a NodeJS                    @tucamon, 07Nov2012¿Qué es Node.js? ●   Single threaded, event-     loop, non-blo...
Introducción a NodeJS                   @tucamon, 07Nov2012¿Qué NO es Node.js? ●   No es un fullstack     Web-framework ● ...
Introducción a NodeJS                   @tucamon, 07Nov2012  Intro  Arquitectura  API  NPM y módulos destacados  Críticas ...
Introducción a NodeJS                             @tucamon, 07Nov2012  Ref:  http://blog.mixu.net/2011/02/01/understanding...
Introducción a NodeJS                             @tucamon, 07Nov2012Blocking  Ref:  http://magnetik.github.com/node-webid...
Introducción a NodeJS                             @tucamon, 07Nov2012Blocking             <?php             <?php         ...
Introducción a NodeJS                          @tucamon, 07Nov2012NonBlocking  Ref: http://magnetik.github.com/node-webid-...
Introducción a NodeJS                             @tucamon, 07Nov2012NonBlocking     query("select...", function (result) ...
Introducción a NodeJS                   @tucamon, 07Nov2012Blocking vs NonBlocking                           Memoria      ...
Introducción a NodeJS                   @tucamon, 07Nov2012Blocking vs NonBlockingAlessandro Mascherpa, @AlessMascherpa   ...
Introducción a NodeJS                   @tucamon, 07Nov2012Blocking vs NonBlockingAlessandro Mascherpa, @AlessMascherpa   ...
Introducción a NodeJS                   @tucamon, 07Nov2012  Intro  Arquitectura  API  NPM y módulos destacados  Críticas ...
Introducción a NodeJS                                @tucamon, 07Nov2012La API de Node.js: extendiendo JS ●   Procesos ●  ...
Introducción a NodeJS                   @tucamon, 07Nov2012Node.js Hello World: Simple Servidor HTTPvar http = require(htt...
Introducción a NodeJS                   @tucamon, 07Nov2012  Intro  Arquitectura  API  NPM y módulos destacados  Críticas ...
Introducción a NodeJS                          @tucamon, 07Nov2012Node Package Manager: npm ●   Repositorio de módulos    ...
Introducción a NodeJS                      @tucamon, 07Nov2012Connect y Express.js ●   Connect es un HTTP server framework...
Introducción a NodeJS                   @tucamon, 07Nov2012var express = require(express);var app = express.createServer(e...
Introducción a NodeJS                              @tucamon, 07Nov2012Otros módulos destacados ●   Underscore ●   CoffeScr...
Introducción a NodeJS                   @tucamon, 07Nov2012  Intro  Arquitectura  API  NPM y módulos destacados  Críticas ...
Introducción a NodeJS                       @tucamon, 07Nov2012Críticas vs Visionarios ●   Que si el código es         ●  ...
Introducción a NodeJS                       @tucamon, 07Nov2012Problemas con Node.js ●   Procesos largos de cálculo. Soluc...
Introducción a NodeJS                   @tucamon, 07Nov2012Callback Helldatabase.find(foo, function (err, data) {  databas...
Introducción a NodeJS                                 @tucamon, 07Nov2012Solucionando el CallBack Hell ●   Código orientad...
Introducción a NodeJS                   @tucamon, 07Nov2012  Intro  Arquitectura  API  NPM y módulos destacados  Críticas ...
Introducción a NodeJS                   @tucamon, 07Nov2012Casos de uso de Node.js en la web ●   Comunicaciones ●   Stream...
Introducción a NodeJS                   @tucamon, 07Nov2012¿Qué tiene que ver Node.js con Drupal? ●   Drupal es una gran p...
Introducción a NodeJS                               @tucamon, 07Nov2012Casos de uso Node.js en Drupal ●   Node.js Integrat...
Introducción a NodeJS                   @tucamon, 07Nov2012Demo 1.Instalar NodeJS (que ya incluye npm) 2.Instalar Drupal 3...
Introducción a NodeJS                   @tucamon, 07Nov2012Demo 2 6.Copiar nodejs.config.js y   drupalchat_nodejs.server.e...
Introducción a NodeJS                    @tucamon, 07Nov2012Demo 3: Configpath_to_modules/nodejs/nodejs.config.js settings...
Introducción a NodeJS                                    @tucamon, 07Nov2012Demo 4: Extensionpath_to_modules/nodejs/drupal...
Introducción a NodeJS                   @tucamon, 07Nov2012Demo 5: Event emitpath_to_modules/nodejs/server.js1100 socket.o...
Introducción a NodeJS                               @tucamon, 07Nov2012  Demo 6: NodeJS module API  path_to_modules/nodejs...
Introducción a NodeJS                   @tucamon, 07Nov2012  Intro  Arquitectura  API  NPM y módulos destacados  Críticas ...
Introducción a NodeJS                   @tucamon, 07Nov2012Referencias ●   http://blog.nodejitsu.com/ ●   http://nodetuts....
Introducción a NodeJS                               @tucamon, 07Nov2012Libros ●   Hands on Node:     http://www.packtpub.c...
Introducción a NodeJS                     @tucamon, 07Nov2012¿Preguntas?                            Gracias :)            ...
Próxima SlideShare
Cargando en…5
×

Introducción a Node.js

4.419 visualizaciones

Publicado el

Introducción a Node.js desde la perspectiva del desarrollo web y su relación con Drupal.

Publicado en: Tecnología
1 comentario
8 recomendaciones
Estadísticas
Notas
Sin descargas
Visualizaciones
Visualizaciones totales
4.419
En SlideShare
0
De insertados
0
Número de insertados
225
Acciones
Compartido
0
Descargas
136
Comentarios
1
Recomendaciones
8
Insertados 0
No insertados

No hay notas en la diapositiva.

Introducción a Node.js

  1. 1. Introducción a Node.jsGrupo de usuarios Drupal Alicante + @tucamon07/11/2012http://vimeo.com/53137688Alessandro Mascherpa@AlessMascherpa
  2. 2. Introducción a NodeJS @tucamon, 07Nov2012Personal ● 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/castellonAlessandro Mascherpa, @AlessMascherpa 2/ 42
  3. 3. Introducción a NodeJS @tucamon, 07Nov2012 Intro Arquitectura API NPM y módulos destacados Críticas y problemas Casos de uso ReferenciasAlessandro Mascherpa, @AlessMascherpa 3/ 42
  4. 4. Introducción a NodeJS @tucamon, 07Nov2012 Intro Arquitectura API NPM y módulos destacados Críticas y problemas Casos de uso ReferenciasAlessandro Mascherpa, @AlessMascherpa 4/ 42
  5. 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. 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 élAlessandro Mascherpa, @AlessMascherpa 6/ 42
  7. 7. Introducción a NodeJS @tucamon, 07Nov2012 Intro Arquitectura API NPM y módulos destacados Críticas y problemas Casos de uso ReferenciasAlessandro Mascherpa, @AlessMascherpa 7/ 42
  8. 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. 9. Introducción a NodeJS @tucamon, 07Nov2012Blocking Ref: http://magnetik.github.com/node-webid-report/Alessandro Mascherpa, @AlessMascherpa 9/ 42
  10. 10. Introducción a NodeJS @tucamon, 07Nov2012Blocking <?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. 11. Introducción a NodeJS @tucamon, 07Nov2012NonBlocking Ref: http://magnetik.github.com/node-webid-report/ http://www.aaronstannard.com/post/2011/12/14/Intro-to-NodeJS-for-NET-DeAlessandro Mascherpa, @AlessMascherpa 11 / 42
  12. 12. Introducción a NodeJS @tucamon, 07Nov2012NonBlocking 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. 13. Introducción a NodeJS @tucamon, 07Nov2012Blocking vs NonBlocking Memoria Event-Loop T0 T1 T2 T3 T4 Memoria T5 PH0 PH1 PH2 PH3 PH4 PH5 Recursos compartidosModeloApacheAlessandro Mascherpa, @AlessMascherpa 13 / 42
  14. 14. Introducción a NodeJS @tucamon, 07Nov2012Blocking vs NonBlockingAlessandro Mascherpa, @AlessMascherpa 14 / 42
  15. 15. Introducción a NodeJS @tucamon, 07Nov2012Blocking vs NonBlockingAlessandro Mascherpa, @AlessMascherpa 15 / 42
  16. 16. Introducción a NodeJS @tucamon, 07Nov2012 Intro Arquitectura API NPM y módulos destacados Críticas y problemas Casos de uso ReferenciasAlessandro Mascherpa, @AlessMascherpa 16 / 42
  17. 17. Introducción a NodeJS @tucamon, 07Nov2012La 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/NodeJSAlessandro Mascherpa, @AlessMascherpa 17 / 42
  18. 18. Introducción a NodeJS @tucamon, 07Nov2012Node.js Hello World: Simple Servidor HTTPvar 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. 19. Introducción a NodeJS @tucamon, 07Nov2012 Intro Arquitectura API NPM y módulos destacados Críticas y problemas Casos de uso ReferenciasAlessandro Mascherpa, @AlessMascherpa 19 / 42
  20. 20. Introducción a NodeJS @tucamon, 07Nov2012Node 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. 21. Introducción a NodeJS @tucamon, 07Nov2012Connect 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. 22. Introducción a NodeJS @tucamon, 07Nov2012var 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. 23. Introducción a NodeJS @tucamon, 07Nov2012Otros 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/modulesAlessandro Mascherpa, @AlessMascherpa 23 / 42
  24. 24. Introducción a NodeJS @tucamon, 07Nov2012 Intro Arquitectura API NPM y módulos destacados Críticas y problemas Casos de uso ReferenciasAlessandro Mascherpa, @AlessMascherpa 24 / 42
  25. 25. Introducción a NodeJS @tucamon, 07Nov2012Crí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. 26. Introducción a NodeJS @tucamon, 07Nov2012Problemas 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-hellAlessandro Mascherpa, @AlessMascherpa 26 / 42
  27. 27. Introducción a NodeJS @tucamon, 07Nov2012Callback Helldatabase.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. 28. Introducción a NodeJS @tucamon, 07Nov2012Solucionando 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-wAlessandro Mascherpa, @AlessMascherpa 28 / 42
  29. 29. Introducción a NodeJS @tucamon, 07Nov2012 Intro Arquitectura API NPM y módulos destacados Críticas y problemas Casos de uso ReferenciasAlessandro Mascherpa, @AlessMascherpa 29 / 42
  30. 30. Introducción a NodeJS @tucamon, 07Nov2012Casos 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 consolaAlessandro Mascherpa, @AlessMascherpa 30 / 42
  31. 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. 32. Introducción a NodeJS @tucamon, 07Nov2012Casos 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-drupalAlessandro Mascherpa, @AlessMascherpa 32 / 42
  33. 33. Introducción a NodeJS @tucamon, 07Nov2012Demo 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/1713530Alessandro Mascherpa, @AlessMascherpa 33 / 42
  34. 34. Introducción a NodeJS @tucamon, 07Nov2012Demo 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 sistemaAlessandro Mascherpa, @AlessMascherpa 34 / 42
  35. 35. Introducción a NodeJS @tucamon, 07Nov2012Demo 3: Configpath_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. 36. Introducción a NodeJS @tucamon, 07Nov2012Demo 4: Extensionpath_to_modules/nodejs/drupalchat_nodejs.server.extension.js49 .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. 37. Introducción a NodeJS @tucamon, 07Nov2012Demo 5: Event emitpath_to_modules/nodejs/server.js1100 socket.on(disconnect, function () {1101 process.emit(client-disconnect, socket.id);1102 cleanupSocket(socket);1103 });Alessandro Mascherpa, @AlessMascherpa 37 / 42
  38. 38. Introducción a NodeJS @tucamon, 07Nov2012 Demo 6: NodeJS module API path_to_modules/nodejs/server.js391 /**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. 39. Introducción a NodeJS @tucamon, 07Nov2012 Intro Arquitectura API NPM y módulos destacados Críticas y problemas Casos de uso ReferenciasAlessandro Mascherpa, @AlessMascherpa 39 / 42
  40. 40. Introducción a NodeJS @tucamon, 07Nov2012Referencias ● 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,-ApplicaAlessandro Mascherpa, @AlessMascherpa 40 / 42
  41. 41. Introducción a NodeJS @tucamon, 07Nov2012Libros ● Hands on Node: http://www.packtpub.com/node-javascript-web-development/book ● Node Web Development: http://nodetuts.com/handson-nodejs-book.htmlAlessandro Mascherpa, @AlessMascherpa 41 / 42
  42. 42. Introducción a NodeJS @tucamon, 07Nov2012¿Preguntas? Gracias :) Alessandro Mascherpa @AlessMascherpaAlessandro Mascherpa, @AlessMascherpa 42 / 42

×