42
Introducción a Node.js Grupo de usuarios Drupal Alicante + @tucamon 07/11/2012 Alessandro Mascherpa @AlessMascherpa http://vimeo.com/53137688

Introducción a Node.js

Embed Size (px)

DESCRIPTION

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

Citation preview

  • 1. Introduccin a Node.jsGrupo de usuarios Drupal Alicante + @tucamon07/11/2012http://vimeo.com/53137688Alessandro Mascherpa@AlessMascherpa

2. Introduccin a NodeJS @tucamon, 07Nov2012Personal Desarrollador web freelance http://es.linkedin.com/in/alessmascherpa Miembro de la Asociacin Espaola 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 Castelln: @DrupalCS, http://groups.drupal.org/castellonAlessandro Mascherpa, @AlessMascherpa 2/ 42 3. Introduccin a NodeJS @tucamon, 07Nov2012IntroArquitecturaAPINPM y mdulos destacadosCrticas y problemasCasos de usoReferenciasAlessandro Mascherpa, @AlessMascherpa 3/ 42 4. Introduccin a NodeJS @tucamon, 07Nov2012IntroArquitecturaAPINPM y mdulos destacadosCrticas y problemasCasos de usoReferenciasAlessandro Mascherpa, @AlessMascherpa 4/ 42 5. Introduccin a NodeJS@tucamon, 07Nov2012Qu 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-drivenRef: http://nodejs.org/ Super coolAlessandro Mascherpa, @AlessMascherpa5/ 42 6. Introduccin a NodeJS @tucamon, 07Nov2012Qu 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. Introduccin a NodeJS @tucamon, 07Nov2012IntroArquitecturaAPINPM y mdulos destacadosCrticas y problemasCasos de usoReferenciasAlessandro Mascherpa, @AlessMascherpa 7/ 42 8. Introduccin a NodeJS @tucamon, 07Nov2012Ref:http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/Alessandro Mascherpa, @AlessMascherpa 8/42 9. Introduccin a NodeJS @tucamon, 07Nov2012BlockingRef:http://magnetik.github.com/node-webid-report/Alessandro Mascherpa, @AlessMascherpa 9/ 42 10. Introduccin a NodeJS @tucamon, 07Nov2012Blocking ?>Ref:http://magnetik.github.com/node-webid-report/Alessandro Mascherpa, @AlessMascherpa10 / 42 11. Introduccin a NodeJS@tucamon, 07Nov2012NonBlockingRef: http://magnetik.github.com/node-webid-report/http://www.aaronstannard.com/post/2011/12/14/Intro-to-NodeJS-for-NET-DeAlessandro Mascherpa, @AlessMascherpa11 / 42 12. Introduccin a NodeJS @tucamon, 07Nov2012NonBlocking query("select...", function (result) {query("select...", function (result) {// usa result // usa result });}); //haz otra cosa//haz otra cosaRef:http://magnetik.github.com/node-webid-report/Alessandro Mascherpa, @AlessMascherpa12 / 42 13. Introduccin a NodeJS @tucamon, 07Nov2012Blocking vs NonBlocking MemoriaEvent-Loop T0 T1 T2 T3 T4 Memoria T5 PH0PH1PH2PH3PH4PH5RecursoscompartidosModeloApacheAlessandro Mascherpa, @AlessMascherpa13 /42 14. Introduccin a NodeJS @tucamon, 07Nov2012Blocking vs NonBlockingAlessandro Mascherpa, @AlessMascherpa14 / 42 15. Introduccin a NodeJS @tucamon, 07Nov2012Blocking vs NonBlockingAlessandro Mascherpa, @AlessMascherpa15 / 42 16. Introduccin a NodeJS @tucamon, 07Nov2012IntroArquitecturaAPINPM y mdulos destacadosCrticas y problemasCasos de usoReferenciasAlessandro Mascherpa, @AlessMascherpa16 / 42 17. Introduccin 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, @AlessMascherpa17 /42 18. Introduccin 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, @AlessMascherpa18 / 42 19. Introduccin a NodeJS @tucamon, 07Nov2012IntroArquitecturaAPINPM y mdulos destacadosCrticas y problemasCasos de usoReferenciasAlessandro Mascherpa, @AlessMascherpa19 / 42 20. Introduccin a NodeJS@tucamon, 07Nov2012Node Package Manager: npm Repositorio de mdulos$ npm list Node.js Gestiona instalacin, [email protected] actualizacin ... de [email protected] mdulos [email protected] Node.js permite [email protected] coexistencia de diferentes [email protected] versiones de un mdulo en [email protected] el sistema. [email protected]@0.3.1 NPM incluido en Node.js desde la versin 0.6.x Ref: http://npmjs.org/Alessandro Mascherpa, @AlessMascherpa 20 / 42 21. Introduccin 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. Introduccin 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, @AlessMascherpa22 / 42 23. Introduccin a NodeJS@tucamon, 07Nov2012Otros mdulos 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. Introduccin a NodeJS @tucamon, 07Nov2012IntroArquitecturaAPINPM y mdulos destacadosCrticas y problemasCasos de usoReferenciasAlessandro Mascherpa, @AlessMascherpa24 / 42 25. Introduccin a NodeJS @tucamon, 07Nov2012Crticas vs Visionarios Que si el cdigo es Hay voces (o ms 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 ms elegante... para cada webapp que hagamos... cada herramienta tiene su mbito deaplicacin donde destaca. Suerte quetenemos opciones.Alessandro Mascherpa, @AlessMascherpa25 / 42 26. Introduccin a NodeJS @tucamon, 07Nov2012Problemas con Node.js Procesos largos de clculo. Soluciones: Refactorizar el algoritmo: process.nextTick(callback(){ }); Crear un servicio de backend y desviar el clculo. Matriosca-style-coding, Boomerang-shape-code o Callback-hellAlessandro Mascherpa, @AlessMascherpa26 / 42 27. Introduccin 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. Introduccin a NodeJS @tucamon, 07Nov2012Solucionando el CallBack Hell Cdigo orientado a var onDelete = function (err, eventos y funcionesdata) {console.log(data);}, con nombre en lugaronUpdate = function (err, data) de funciones {database.delete(bar, annimas onDelete);}, Usando mdulos que onFind = function (err, data) abstraigan la{database.update(foo, bar,onUpdate);}; serializacin y concurrencia de la database.find(foo, onFind); ejecucin de callbacksRef: http://stackoverflow.com/questions/5366424/writing-blocking-code-in-nodejshttp://stackoverflow.com/questions/5265743/node-js-what-techniques-are-there-for-wAlessandro Mascherpa, @AlessMascherpa 28 / 42 29. Introduccin a NodeJS @tucamon, 07Nov2012IntroArquitecturaAPINPM y mdulos destacadosCrticas y problemasCasos de usoReferenciasAlessandro Mascherpa, @AlessMascherpa29 / 42 30. Introduccin a NodeJS @tucamon, 07Nov2012Casos de uso de Node.js en la web Comunicaciones Streaming Colaboracin Juegos online Monitorizacin en definitiva aplicaciones de red tiempo real, pero tambin... Servidores web eficientes Aplicaciones de escritorio y de consolaAlessandro Mascherpa, @AlessMascherpa30 / 42 31. Introduccin a NodeJS @tucamon, 07Nov2012Qu 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, @AlessMascherpa31 / 42 32. Introduccin 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): aplicacin 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, @AlessMascherpa32 / 42 33. Introduccin 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 tendramos que instalar las de nuestro mdulo) Ref: http://drupal.org/node/1713530Alessandro Mascherpa, @AlessMascherpa33 / 42 34. Introduccin 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.Aadir a nodejs.config.js datos de nuestro sistemaAlessandro Mascherpa, @AlessMascherpa34 / 42 35. Introduccin 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, @AlessMascherpa35 / 42 36. Introduccin 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) {51if(drupalchat_users[user] == sessionId) {52ruser = user;53break;54}55 }56 console.log(Out -+ ruser);57 delete drupalchat_users[ruser];58 if(ruser!=0) {59for (var user in drupalchat_users) {60if(drupalchat_users[user] != sessionId)61publishMessageToClient(drupalchat_users[user], {type: userOffline,data: ruser, callback: drupalchatNodejsMessageHandler});62}63 }64 });Alessandro Mascherpa, @AlessMascherpa 36 / 42 37. Introduccin 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, @AlessMascherpa37 / 42 38. Introduccin a NodeJS @tucamon, 07Nov2012Demo 6: NodeJS module APIpath_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. Introduccin a NodeJS @tucamon, 07Nov2012IntroArquitecturaAPINPM y mdulos destacadosCrticas y problemasCasos de usoReferenciasAlessandro Mascherpa, @AlessMascherpa39 / 42 40. Introduccin 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, @AlessMascherpa40 / 42 41. Introduccin 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, @AlessMascherpa41 / 42 42. Introduccin a NodeJS @tucamon, 07Nov2012Preguntas?Gracias :)Alessandro Mascherpa@AlessMascherpaAlessandro Mascherpa, @AlessMascherpa42 / 42