Node.js @ Rubyslava
Upcoming SlideShare
Loading in...5
×
 

Node.js @ Rubyslava

on

  • 1,501 views

Rubyslava - Programmers' Meetup in Bratislava, May 17, 2012

Rubyslava - Programmers' Meetup in Bratislava, May 17, 2012

Statistics

Views

Total Views
1,501
Views on SlideShare
1,425
Embed Views
76

Actions

Likes
1
Downloads
3
Comments
0

2 Embeds 76

http://speakerrate.com 67
http://lanyrd.com 9

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Node.js @ Rubyslava Node.js @ Rubyslava Presentation Transcript

  • Ivan Srba Rubyslava, 17.5.2012Powerpoint Templates Page 1
  • Prívlastky node.jsPowerpoint Templates Page 2
  • Prečo vzniklo node.js?• Lebo Ryan Dahl „Windows is very important, just like php.“ Powerpoint Templates Page 3
  • Prečo vzniklo node.js?• I/O operácie sú drahéL1-cache 3 cyclesL2-cache 14 cyclesRAM 250 cyclesDisk 41 000 000 cyclesNetwork 240 000 000 cycles • Riešenie: fork, threadshttp://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ Powerpoint Templates Page 4
  • Prečo vzniklo node.js?• Vlákna sú pamäťovo náročné • Ďalšie problémy: deadlockhttp://blog.webfaction.com/a-little-holiday-present Powerpoint Templates Page 5
  • O node.js• Serverová platforma • Založená na Chrome JS runtime V8 • Jednovláknová • Udalosťami riadená• Určená pre • Aplikácie pracujúce s veľkým množstvom dát • Aplikácie pracujúce v reálnom čase Powerpoint Templates Page 6
  • Princíp node.jshttp://magnetik.github.com/node-webid-report/ Powerpoint Templates Page 7
  • Hello worldvar 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 at http://127.0.0.1:1337/); Powerpoint Templates Page 8
  • Modulárnosť• Node Package Management, NPM • Celkovo až 9950 modulov • Webové frameworky, databázy, web sockety • Parsery, TCP/IP, ladenie, I18N, ... Powerpoint Templates Page 9
  • Web frameworky• Express • Jeden z najpoužívanejších frameworkov inšpirovaný Sinatrou• Locomotive • MVC framework inšpirovaný RoR• RailwayJS • MVC framework podobný RoR Powerpoint Templates Page 10
  • Databázy• Relačné databázy • PostgreSQL, MySQL, MSSQL, SQLite, Oracle• NoSQL databázy • Mongo, Hive, Redis, CouchDB, Cassandra• ORM Powerpoint Templates Page 11
  • Web sockety• Socket.io • Knižnica poskytujúca univerzálne API pre vytváranie aplikácií pracujúcich v reálnom čase • Protokoly: WebSocket, AJAX long pooling, JSONP pooling... • Prehliadače: IE, Safari, Google, Firefox, Opera, ... Powerpoint Templates Page 12
  • Použitie node.js• PopCorm • Kolaboratívna platforma • Pre riešenie úloh (vzdelávanie) • Integruje sadu kolaboratívnych nástrojov • Textový editor, grafický editor, kategorizátor, diskusia PopCorm Powerpoint Templates Page 13
  • PopCorm• CRUD časť aplikácie v RoR• Kolaboratívne nástroje v node.js• Ako databáza bolo použité MySQL• Na produkcii sme použili webový server Nginx a Monit na testovanie dostupnosti node.js nástrojov + ich prípadný reštart Powerpoint Templates Page 14
  • Prečo node.js?• Veľké množstvo dát • Každá zmena = nová revízia• Potreba synchronizovať obsah v reálnom čase • Snaha o maximálnu efektívnosť práce skupín • AJAX nie je dostatočne rýchly/efektívny Powerpoint Templates Page 15
  • Video ukážka• Textový editor • Etherpad Lite• Kategorizátor• DiskusiaEtherpad Lite: http://etherpad.org/ Powerpoint Templates Page 16
  • Diskusiavar app = require(express).createServer()var io = require(socket.io).listen(app);var settings = require("./utils/Settings");var messageHandler = require("MessageHandler");app.listen(settings.port);io.sockets.on(connection, function (socket) { socket.on(start, function(...) { messageHandler.handleStart(...); }); socket.on(typing-message, function(...) { messageHandler.handleTypingMessage(...); }); socket.on(send-message, function(...) { messageHandler.handleNewMessage(...); }); ... Powerpoint Templates Page 17
  • Prijatie novej správyexports.handleNewMessage = function(...) { var created_at = new Date().getTime(); socket.emit(new-message, ...); socket.broadcast.to(socket.group_id). emit(new-message, ...); chatMessage.addNewChatMessage(..., logError); if (activity_id !== null) { userCharacteristicMatrixValue. increaseValue(..., logError); } ... Powerpoint Templates Page 18
  • Praktické skúsenosti• Štatistika • Virtuálny stroj: 4 jadrá, 2GB RAM • 50 paralelne pracujúcich používateľov • Vyťaženie CPU: MySQL 10%, Ruby 5%, node.js <1%• Zistenia • Nástroje v node.js bez problémov zvládali synchronizovať obsah • MySQL by bolo vhodné nahradiť za Redis Powerpoint Templates Page 19
  • Praktické skúsenosti• Identifikované problémy • Museli sme riešiť veľa „zvláštnych“ problémov najmä so socket.io • Pri produkčnom nasadení bol veľký problém s umiestnením node.js aplikácií za Nginx • Stlačenie tlačidla ESC zrušilo vo Firefoxe socketové spojenia so serverom • Niektoré problémy so socketmi sa prejavovali len pri kombinácii 2 a viac rôznych prehliadačov Powerpoint Templates Page 20
  • Pozitíva node.js• Javascript je veľmi vhodný pre programovanie s callbackmi (na rozdiel od Ruby)• Rovnaký programovací jazyk na klientovi aj na serveri• Všetko sa vykonáva asynchrónne (okrem vášho kódu)• Vysoká produktívnosť• Minimálna réžia (CPU, pamäť)• Modulárnosť Powerpoint Templates Page 21
  • Negatíva node.js• „Its Fucking JavaScript“ if (typeof my_var !== "undefined" && my_var !== null) {}• Problémy s produkčným nasadením• Celková nevyspelosť technológie• Priveľmi dynamický vývoj• Nedostatočné technológie pre testovanie Powerpoint Templates Page 22
  • Záver• Kedy nepoužiť node.js • Výpočtovo náročné aplikácie • CRUD/HTML aplikácie• Kedy použiť node.js • JSON API • AJAXom preplnené aplikácie • Streamovanie dát • Realtime aplikácie Powerpoint Templates Page 23
  • Dôležité zdroje• http://nodejs.org/ • Oficiálna stránka node.js• http://nodeguide.com/ • Rozsiahly tutoriál pre programovanie v node.js• http://nodetuts.com/ • Sada 30 video-tutoriálov• http://blog.mixu.net/2011/02/01/understanding-the- node-js-event-loop/ • Vysvetlenie procesu spracovanie udalostí• http://search.npmjs.org/• https://github.com/joyent/node/wiki/modules • Registre modulov Powerpoint Templates Page 24
  • Zaujímavé články• http://www.ibm.com/developerworks/opensource/libra ry/os-nodejs/ • Úvod do node.js• http://simonwillison.net/2009/nov/23/node/ • Úvod do node.js• http://radar.oreilly.com/2011/07/what-is-node.html • Rozsiahlejší úvod spolu s dobrými príkladmi• http://mashable.com/2011/03/10/node-js/ • Rozsiahlejší úvod spolu s dobrými príkladmi Powerpoint Templates Page 25
  • Zaujímavé články• http://teddziuba.com/2011/10/node-js-is-cancer.html • Trochu iný pohľad na node.js• http://blog.targeterapp.com/post/22984987832/why- we-moved-from-nodejs-to-ror • Prípadová štúdia, kedy autori prešli od node.js k RoR• http://www.unlimitednovelty.com/2012/03/why-critics- of-rails-have-it-all-wrong.html • RoR vs. node.js Powerpoint Templates Page 26