Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Node.jsA Guided TourPresenter: C. Aaron Cois, Ph.D.
The web is changing It   used to be about consumption
Real-time Interaction
Real-time Interaction Real-Time   Games Chat Stock tickers Twitter Feeds Collaboration Creation…on a massive scale
What do we need to make ithappen? Fast,   persistent I/O     HTTP wasn’t built for this     Server’s need to push data ...
Outline What is Node.js? Technology Overview How does it work? Demo Code! Deployment and Hosting
What is Node.js?
Node.js Node.js        is an event-driven, server-side JavaScript environment    Based on the V8 JavaScript Engine,     ...
Platforms Runs    on OSX, Linux, Windows Clickable   installers for:     Windows     Mac OSX Linux   has apt-get and ...
Why Node? Node.js is specifically designed for  building fast, efficient, scalable network  applications Node uses an ev...
Technology: V8 Engine   Developed by Google   Ships with the Google Chrome web browser   Allows Chrome to run JavaScrip...
Technology: JavaScript JavaScript      is:    A fully-functional programming language      Capable of doing anything ot...
Technology: JavaScript2 There’sno reason the JavaScript language can’t be used elsewhere (say, server-side)     This is ...
Who is using Node.js?
How does it work?
The Basic Idea    I/O is expensive
*http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
Ways to deal with I/O Synchronous     One requests at a time, first come, first serve Fork     New process for each re...
Another ThesisThread-per-connection is memory-expensive
Traditional Threaded ModelN  worker threads/processes Each incoming connection handed  to a worker  That   worker is no...
The life of a worker…     Waiting on   Waiting on   Waiting on DB…     File I/O…    Network                  Response…    ...
The life of a worker…                  Blocking Wastes Cycles     Waiting on        Waiting on          Waiting on DB…    ...
The Other Basic IdeaWriting (Good) Threaded    Code is DIFFICULT
The life of N workers…Thread 1Thread 2Thread 3Thread 4                         Time
The life of N workers…Thread 1Thread 2Thread 3Thread 4                         Time
The life of N workers…Thread 1Thread 2            ALL PROCESSES IDLEThread 3Thread 4                         Time
Even worse… If   all threads are in use, every incoming  connection is blocked Thiscan cause  massive traffic jams  on h...
Is this the only way?                         There is                        another…
The Node.js way   Axiom:       Multi-Threaded code         Is difficult to write         Is difficult to debug        ...
Single threaded?!?     Skeptical? I don’t blame you          But hear me out…
Node.js Event Loop Event   Loop (from Wikipedia):    A “construct that waits for and dispatches     events or messages i...
Node.js Event Loop         DB I/O command to event loop       Net I/O command to event loop     File I/O command to event ...
Node.js Event Loop         DB I/O command to event loop       Net I/O command to event loop     File I/O command to event ...
Node.js app code… Isrun entirely in a single thread Passes I/O requests to the event loop,  along with callbacks Your  ...
Callback examplevar filename = “test_file.txt”;fs.open(filename, “w”, function(err, file) {    if (err) throw err;});
Callback example   Filesystem module forwards task to event loopvar file = (“test_file.txt”);fs.open(file, “w”, function(e...
Callback example                          Callback is invoked when work is completevar file = (“test_file.txt”);fs.open(fi...
This is not magic   The    following:for(i=0; i<5; i++) {   sleep(1000);}   Will       block the entire Node event loop ...
Node is in charge Let   Node.js handle     Dispatch     Concurrency     (most) Async operations What    Node doesn’t ...
Interlude: Modules
Node.js API   Node provides an API in the form of modules    (a.k.a. libraries)       Modules work with event loop to di...
A Few Good Modules   Net           Network socket support   HTTP          HTTP communication   File System   File syste...
Node.js Community Additionally,              the Node.js community maintains excellent modules to enhance the capabilitie...
Notable Community Modules Express              Web App Framework Socket.io            Websockets, etc Passport/Everyaut...
Let’s see some code!
Node Web Servervar http = require(http);http.createServer(function (req, res) {  res.writeHead(200, {Content-Type: text/pl...
Node TCP Listenervar net = require(net);var server = net.createServer(function (socket) {    socket.write(Echo serverrn); ...
Live Demohttp://techfestchat.jit.su      Hosting courtesy of Nodejitsu
Any .NET Devs in the room? Microsoft has been expending a lot of effort to make Node a first class frameworkAnd now…
A sneak preview!
MS WebMatrix 2   Open WebMatrix 2
Node.js Deployment andHosting
Cloud Hosting   Heroku   Microsoft Azure   Nodejitsu   Cloud Foundry   Nodester   DotCloud   Appfog   Joyent (comi...
Thanks!   Feel free to look me up at:http://www.codehenge.netI love questions, collaborations, and talking withpeople!  ...
Node.js: A Guided Tour
Node.js: A Guided Tour
Node.js: A Guided Tour
Upcoming SlideShare
Loading in …5
×

Node.js: A Guided Tour

3,154 views

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 http://www.codehenge.net

Published in: Technology
  • Be the first to comment

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. *http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
  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 *http://www.nightmare.com/medusa/async_sockets.html
  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”;fs.open(filename, “w”, function(err, file) { if (err) throw err;});
  36. 36. Callback example Filesystem module forwards task to event loopvar file = (“test_file.txt”);fs.open(file, “w”, function(err, file) { if (err) throw err;});
  37. 37. Callback example Callback is invoked when work is completevar file = (“test_file.txt”);fs.open(file, “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 Socket.io 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, 127.0.0.1);
  47. 47. Node TCP Listenervar net = require(net);var server = net.createServer(function (socket) { socket.write(Echo serverrn); socket.pipe(socket);});server.listen(1337, 127.0.0.1);
  48. 48. Live Demohttp://techfestchat.jit.su 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:http://www.udemy.com/learn-nodejs-by-example/

×