Successfully reported this slideshow.
Your SlideShare is downloading. ×

Nodejs - A quick tour (v4)

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Nodejs - A quick tour (v5)
Nodejs - A quick tour (v5)
Loading in …3
×

Check these out next

1 of 50 Ad

More Related Content

Slideshows for you (20)

Similar to Nodejs - A quick tour (v4) (20)

Advertisement

Recently uploaded (20)

Nodejs - A quick tour (v4)

  1. 1. node.js A quick tour 15.02.2011 (v4)
  2. 2. About • Felix Geisendörfer • 23 years • Berlin, Germany @felixge
  3. 3. Core Contributor & Module Author node-mysql node-formidable
  4. 4. File uploading & processing as an infrastructure service for web & mobile applications.
  5. 5. Audience?
  6. 6. Node's goal is to provide an easy way to build scalable network programs.
  7. 7. Node.js • Created by Ryan Dahl • Google’s V8 JavaScript engine (no DOM) • Module system, I/O bindings, Common Protocols
  8. 8. Installing $ git clone git://github.com/ry/node.git $ cd node $ ./configure $ make install
  9. 9. Hello World $ cat test.js console.log('Hello World'); $ node test.js Hello World
  10. 10. Ingredients libeio libev c-ares V8 http_parser
  11. 11. Philosophy • Just enough core-library to do I/O • Non-blocking • Close to the underlaying system calls
  12. 12. Non-blocking I/O
  13. 13. Blocking I/O var a = db.query('SELECT A'); console.log('result a:', a); var b = db.query('SELECT B'); console.log('result b:', b); Time = SUM(A, B)
  14. 14. Non-Blocking I/O db.query('SELECT A', function(result) { console.log('result a:', result); }); db.query('SELECT B', function(result) { console.log('result b:', result); }); Time = MAX(A, B)
  15. 15. Non-Blocking I/O • Offload most things to the kernel and poll for changes (select, epoll, kqueue, etc.) • Thread pool for anything else
  16. 16. Single Threaded var a = []; function f() { a.push(1); a.push(2); } setTimeout(f, 10); setTimeout(f, 10);
  17. 17. Single Threaded var a = []; function f() { • [1, 1, 2, 2] ? a.push(1); a.push(2); } • [1, 2, 1, 2] ? setTimeout(f, 10); • BAD ACCESS ? setTimeout(f, 10);
  18. 18. Single Threaded var a = []; function f() { • [1, 1, 2, 2] a.push(1); a.push(2); } • [1, 2, 1, 2] setTimeout(f, 10); • BAD ACCESS setTimeout(f, 10);
  19. 19. API Overview
  20. 20. CommonJS Modules $ cat hello.js exports.world = function() { return 'Hello World'; }; $ cat main.js var hello = require('./hello'); console.log(hello.world()); $ node main.js Hello World
  21. 21. Child processes $ cat child.js var spawn = require('child_process').spawn; var cmd = 'echo hello; sleep 1; echo world;'; var child = spawn('sh', ['-c', cmd]); child.stdout.on('data', function(chunk) { console.log(chunk.toString()); }); $ node child.js "hellon" # 1 sec delay "worldnn"
  22. 22. Http Server $ cat http.js var http = require('http'); http.createServer(function(req, res) { setTimeout(function() { res.writeHead(200); res.end('Thanks for waiting!'); }, 1000); }).listen(4000); $ curl localhost:4000 # 1 sec delay Thanks for waiting!
  23. 23. Tcp Server $ cat tcp.js var tcp = require('tcp'); tcp.createServer(function(socket) { socket .on('connect', function() { socket.write("Hi, How Are You?n> "); }) .on('data', function(data) { socket.write(data); }); }).listen(4000); $ nc localhost 4000 Hi, How Are You? > Great! Great!
  24. 24. DNS $ cat dns.js var dns = require('dns'); dns.resolve('nodejs.org', function(err, addresses) { console.log(addresses); }); $ node dns.js [ '8.12.44.238' ]
  25. 25. Watch File $ cat watch.js var fs = require('fs'); fs.watchFile(__filename, function() { console.log('You changed me!'); process.exit(0); }); $ node watch.js # edit watch.js You changed me!
  26. 26. And much more • UDP • Buffer • Crypto • Script • Assert • EcmaScript5 ...
  27. 27. Suitable Applications
  28. 28. Suitable Applications • Singe-page apps • Real time • Crawlers
  29. 29. More Applications • Async chaining of unix tools • Streaming • File uploading
  30. 30. Interesting projects
  31. 31. Package management
  32. 32. Web Frameworks • Express.js (Sinatra clone) • Fab.js (Mind-bending & awesome)
  33. 33. DOM • node-htmlparser • jquery • node.io
  34. 34. WebSockets Socket.IO
  35. 35. 1171 modules in npm
  36. 36. Ready for production?
  37. 37. Ready for production? • 0.4 was released last week • API has settled down for most parts • Very few bugs, but YMMV
  38. 38. Things that suck
  39. 39. Things that suck • Stack traces are lost at the event loop boundary • Utilizing multiple cores requires multiple processes • V8: 1.9 GB heap limit / GC can be problematic
  40. 40. Community
  41. 41. Benevolent Dictator For Life Ryan Dahl
  42. 42. Community • Mailing list (nodejs, nodejs-dev) • IRC (#node.js)
  43. 43. Hosting
  44. 44. Questions? ✎ @felixge / felix@debuggable.com
  45. 45. Bonus Slides
  46. 46. Speed
  47. 47. Speed var http = require(’http’) var b = new Buffer(1024*1024); http.createServer(function (req, res) { res.writeHead(200); res.end(b); }).listen(8000); by Ryan Dahl
  48. 48. Speed 100 concurrent clients 1 megabyte response node 822 req/sec nginx 708 thin 85 mongrel 4 (bigger is better) by Ryan Dahl
  49. 49. Speed • NGINX peaked at 4mb of memory • Node peaked at 60mb • Very special circumstances by Ryan Dahl
  50. 50. Questions? ✎ @felixge / felix@debuggable.com

×