Nodejs - A quick tour (v4)

14,170
-1

Published on

Talk given at the Atlanta JS Meetup (@ATLJavaScript) on Feb 15, 2011.

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
14,170
On Slideshare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
67
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

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 Authornode-mysql node-formidable
  4. 4. File uploading & processing as an infrastructure service for web & mobile applications.
  5. 5. Audience?
  6. 6. Nodes 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.jsconsole.log(Hello World);$ node test.jsHello World
  10. 10. Ingredients libeio libevc-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/Ovar 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/Odb.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 Threadedvar a = [];function f() { a.push(1); a.push(2);}setTimeout(f, 10);setTimeout(f, 10);
  17. 17. Single Threadedvar 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 Threadedvar a = [];function f() { • [1, 1, 2, 2] a.push(1); a.push(2);} • [1, 2, 1, 2]setTimeout(f, 10); • BAD ACCESSsetTimeout(f, 10);
  19. 19. API Overview
  20. 20. CommonJS Modules$ cat hello.jsexports.world = function() { return Hello World;};$ cat main.jsvar hello = require(./hello);console.log(hello.world());$ node main.jsHello World
  21. 21. Child processes$ cat child.jsvar 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.jsvar 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 delayThanks for waiting!
  23. 23. Tcp Server$ cat tcp.jsvar 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 4000Hi, How Are You?> Great!Great!
  24. 24. DNS$ cat dns.jsvar 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.jsvar fs = require(fs);fs.watchFile(__filename, function() { console.log(You changed me!); process.exit(0);});$ node watch.js# edit watch.jsYou 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. Speedvar 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. Speed100 concurrent clients1 megabyte responsenode 822 req/secnginx 708thin 85mongrel 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×