Node.js: A Guided Tour


Published on

These are the slides to a talk I gave at Pittsburgh techFest 2012. The topic was an overview of the Node.js framework, and how you can use it to build amazing things.

* See more of my work at

Published in: Technology
  • Be the first to comment

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Node.js: A Guided Tour

  1. 1. Node.jsA Guided TourPresenter: C. Aaron Cois, Ph.D.
  2. 2. The web is changing It used to be about consumption
  3. 3. Real-time Interaction
  4. 4. Real-time Interaction Real-Time Games Chat Stock tickers Twitter Feeds Collaboration Creation…on a massive scale
  5. 5. What do we need to make ithappen? Fast, persistent I/O  HTTP wasn’t built for this  Server’s need to push data to clients  Polling is slow and inefficient Scalability Usability Maintainability
  6. 6. Outline What is Node.js? Technology Overview How does it work? Demo Code! Deployment and Hosting
  7. 7. What is Node.js?
  8. 8. Node.js Node.js is an event-driven, server-side JavaScript environment  Based on the V8 JavaScript Engine, developed by Google Most importantly, node.js is a  server-side runtime environment, that  compiles and executes JavaScript very efficiently.
  9. 9. Platforms Runs on OSX, Linux, Windows Clickable installers for:  Windows  Mac OSX Linux has apt-get and yum
  10. 10. Why Node? Node.js is specifically designed for building fast, efficient, scalable network applications Node uses an event-driven, non-blocking I/O model to maximize efficiency
  11. 11. Technology: V8 Engine Developed by Google Ships with the Google Chrome web browser Allows Chrome to run JavaScript code much faster  It does this by compiling the JavaScript directly into native machine code  As opposed to interpreting JavaScript, or execute it as bytecode What does this mean for us, and for Node.js?
  12. 12. Technology: JavaScript JavaScript is:  A fully-functional programming language  Capable of doing anything other traditional languages (C++, Java, Ruby, etc) can do  Has an excellent event model  Traditionally resigned to the context of the web application frontend  i.e. running inside a web browser
  13. 13. Technology: JavaScript2 There’sno reason the JavaScript language can’t be used elsewhere (say, server-side)  This is where node.js comes in, executing JavaScript efficiently on the server-side JavaScript brings to Node.js:  Natural event-based programming, ideal for client-server applications  A known language, with low overhead
  14. 14. Who is using Node.js?
  15. 15. How does it work?
  16. 16. The Basic Idea I/O is expensive
  17. 17. *
  18. 18. Ways to deal with I/O Synchronous  One requests at a time, first come, first serve Fork  New process for each request Threads  New thread for each request *
  19. 19. Another ThesisThread-per-connection is memory-expensive
  20. 20. Traditional Threaded ModelN worker threads/processes Each incoming connection handed to a worker  That worker is now “in use”, and can handle no other connection, even if it is waiting on:  FileI/O  DB I/O  Network I/O  etc
  21. 21. The life of a worker… Waiting on Waiting on Waiting on DB… File I/O… Network Response… Time
  22. 22. The life of a worker… Blocking Wastes Cycles Waiting on Waiting on Waiting on DB… File I/O… Network Response… Time
  23. 23. The Other Basic IdeaWriting (Good) Threaded Code is DIFFICULT
  24. 24. The life of N workers…Thread 1Thread 2Thread 3Thread 4 Time
  25. 25. The life of N workers…Thread 1Thread 2Thread 3Thread 4 Time
  26. 26. The life of N workers…Thread 1Thread 2 ALL PROCESSES IDLEThread 3Thread 4 Time
  27. 27. Even worse… If all threads are in use, every incoming connection is blocked Thiscan cause massive traffic jams on high-throughput applications
  28. 28. Is this the only way? There is another…
  29. 29. The Node.js way Axiom:  Multi-Threaded code  Is difficult to write  Is difficult to debug  Sucks up more dev/test/maintenance cycles  Most often has inefficient performance Conclusion:  Screw it: Write code using a single thread
  30. 30. Single threaded?!? Skeptical? I don’t blame you But hear me out…
  31. 31. Node.js Event Loop Event Loop (from Wikipedia):  A “construct that waits for and dispatches events or messages in a program” Instead of performing I/O ourselves, we dispatch I/O events to Node’s event loop  It handles threads, process optimization, concurrency, etc
  32. 32. Node.js Event Loop DB I/O command to event loop Net I/O command to event loop File I/O command to event loop Time
  33. 33. Node.js Event Loop DB I/O command to event loop Net I/O command to event loop File I/O command to event loop Open for more work! Time
  34. 34. Node.js app code… Isrun entirely in a single thread Passes I/O requests to the event loop, along with callbacks Your code then:  Goes to sleep  Uses no system resources  Will be notified via callback when I/O is complete
  35. 35. Callback examplevar filename = “test_file.txt”;, “w”, function(err, file) { if (err) throw err;});
  36. 36. Callback example Filesystem module forwards task to event loopvar file = (“test_file.txt”);, “w”, function(err, file) { if (err) throw err;});
  37. 37. Callback example Callback is invoked when work is completevar file = (“test_file.txt”);, “w”, function(err, file) { if (err) throw err;});
  38. 38. This is not magic  The following:for(i=0; i<5; i++) { sleep(1000);}  Will block the entire Node event loop for 5 seconds
  39. 39. Node is in charge Let Node.js handle  Dispatch  Concurrency  (most) Async operations What Node doesn’t promise:  To not block when you tell it to  Order of execution (e.g. forked parallel processes)
  40. 40. Interlude: Modules
  41. 41. Node.js API Node provides an API in the form of modules (a.k.a. libraries)  Modules work with event loop to dispatch async tasks API modules are installed along with Node  They provide standard application framework functionality  STDIO: console logging, timing, tracing  File System: File system access  …etc
  42. 42. A Few Good Modules Net Network socket support HTTP HTTP communication File System File system access Crypto Cryptography Streams STDIO Many more…
  43. 43. Node.js Community Additionally, the Node.js community maintains excellent modules to enhance the capabilities of Node These modules operate as  Libraries  Toolkits  Frameworks  …and much more.
  44. 44. Notable Community Modules Express Web App Framework Websockets, etc Passport/Everyauth Authentication Jade HTML Template Engine Connect Middleware collection Less Simplified CSS
  45. 45. Let’s see some code!
  46. 46. Node Web Servervar http = require(http);http.createServer(function (req, res) { res.writeHead(200, {Content-Type: text/plain}); res.end(Hello Worldn);}).listen(1337,;
  47. 47. Node TCP Listenervar net = require(net);var server = net.createServer(function (socket) { socket.write(Echo serverrn); socket.pipe(socket);});server.listen(1337,;
  48. 48. Live Demo Hosting courtesy of Nodejitsu
  49. 49. Any .NET Devs in the room? Microsoft has been expending a lot of effort to make Node a first class frameworkAnd now…
  50. 50. A sneak preview!
  51. 51. MS WebMatrix 2 Open WebMatrix 2
  52. 52. Node.js Deployment andHosting
  53. 53. Cloud Hosting Heroku Microsoft Azure Nodejitsu Cloud Foundry Nodester DotCloud Appfog Joyent (coming soon) …
  54. 54. Thanks! Feel free to look me up at:http://www.codehenge.netI love questions, collaborations, and talking withpeople! If you are interested in formal Node.js learning, I also have a course available at:
  1. A particular slide catching your eye?

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