understanding                                       the                                  platformDomenic Denicolahttp://do...
story time@domenic
Domenic Denicola                                          @domenic           https://npmjs.org/profile/domenicdenicola    ...
agenda how      to node why      to node coding     time@domenic
how to node@domenic
how to node@domenic
how to node@domenic
why to node new      and shiny fast scalable low-level community@domenic
new and shiny@domenic
let’s look at the most-used  node.js packages.@domenic
   socket.io: used by 306 other packages    redis: 259 (hiredis: 70)    stylus: 148 (less: 134)    mongodb: 144 (mongo...
fast@domenic
@domenic
New HTTP Parser Ive implemented a new HTTP/1.1 request and response parser by hand. (My previous parser was written with t...
@domenic
scalable@domenic
q: what do web servers actually do?  a: i/o@domenic
Response.Write("hello, world!");@domenic
move_uploaded_file(     $_FILES[userphoto][tmp_name],     "/var/www/userphotos/" . $_POST[username]  );@domenic
import memcache  mc = memcache.Client([127.0.0.1:11211])  mc.set("heavily_used_data", "data")  value = mc.get("more_data")...
class Post < ActiveRecord::Base     attr_accessible :content, :name, :title    validates :name, :presence => true    valid...
move this stuff out of the context of  the web for a moment@domenic
@domenic
q: how do last-generation web     servers fix this problem?  a: threads@domenic
let’s talk about threads.@domenic
they suck.  the end.@domenic
q: how does node solve this problem?  a: javascript@domenic
My next project Im going to write a special thin web server tied to the V8 javascript interpreter The web server will exec...
javascript has never had  blocking i/o@domenic
javascript has never had  more than one thread@domenic
instead we use callbacks  and events@domenic
$.get("http://nodejs.org", function (data) {      document.body.innerHTML = data;  });@domenic
var dbReq = indexedDB.open("my-database");  dbReq.addEventListener("success", function () {      var dbConnection = dbReq....
it’s the same in node@domenic
fs.readFile("/etc/passwd", function (err, data) {      console.log(data);  });@domenic
request.on("data", function (chunk) {      response.write(chunk);  });@domenic
db.users.find({ name: "domenic" }, function (err, users) {      users.forEach(function (user) {          response.write(us...
io.sockets.on("connection", function (socket) {      socket.emit("news", { hello: "world" });      socket.on("my other eve...
low-level@domenic
 STDIO  Timers  Process  Utilities    Events  Domain  Buffer  Stream     Crypto  TLS/SSL  String Decoder File ...
that’s it.  that’s all you get.@domenic
community@domenic
@domenic
codingTime();            https://github.com/domenic/understanding-node@domenic
Upcoming SlideShare
Loading in...5
×

Understanding the Node.js Platform

4,464

Published on

Node.js is an exciting new platform for building web applications in JavaScript. With its unique I/O model, it excels at the sort of scalable and real-time situations we are increasingly demanding of our servers. And the ability to use JavaScript for both the client and server opens up many possibilities for code sharing, expertise reuse, and rapid development.

This class is intended for those with some basic knowledge of JavaScript, interested in an introduction to the Node.js ecosystem and development platform. We'll discuss how to get started with Node, and why you would want to. We'll then explore Node's module and package system, demonstrating several of the more popular and impressive packages that exemplify the type of tasks Node excels at. These include low-level HTTP streaming with the http module, high-level bidirectional websocket communication with socket.io, and server-browser code sharing with browserify, jsdom, and node-canvas.

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

No Downloads
Views
Total Views
4,464
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
82
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • Don’t expand on each point yet
  • “Solving modern problems.”
  • Ask the audience what their webservers doLead in to next slide is “let’s look at some examples of this in our usual web frameworks”
  • Ask the audience what their webservers do
  • Ask the audience what their webservers do
  • Don’t explain this, just read it---explanation is on upcoming slides.
  • Why is this a good thing? Well that leads us to our next point, which is that Node.js is…
  • Don’t forget Knox and Q stories
  • Understanding the Node.js Platform

    1. 1. understanding the platformDomenic Denicolahttp://domenicdenicola.com@domenic
    2. 2. story time@domenic
    3. 3. Domenic Denicola @domenic https://npmjs.org/profile/domenicdenicola http://github.com/domenic http://github.com/NobleJS@domenic
    4. 4. agenda how to node why to node coding time@domenic
    5. 5. how to node@domenic
    6. 6. how to node@domenic
    7. 7. how to node@domenic
    8. 8. why to node new and shiny fast scalable low-level community@domenic
    9. 9. new and shiny@domenic
    10. 10. let’s look at the most-used node.js packages.@domenic
    11. 11.  socket.io: used by 306 other packages  redis: 259 (hiredis: 70)  stylus: 148 (less: 134)  mongodb: 144 (mongoose: 135)@domenic
    12. 12. fast@domenic
    13. 13. @domenic
    14. 14. New HTTP Parser Ive implemented a new HTTP/1.1 request and response parser by hand. (My previous parser was written with the help of Ragel.) It requires 124 bytes per HTTP connection, makes zero allocations, has no dependencies, is nearly optimal in its use of CPU instructions, interruptible on any character, has extensive tests, and is MIT licensed. README http_parser.h http_parser.c (Only one user at the moment: Ive just merged it into Node.) http://four.livejournal.com/1033160.html@domenic
    15. 15. @domenic
    16. 16. scalable@domenic
    17. 17. q: what do web servers actually do? a: i/o@domenic
    18. 18. Response.Write("hello, world!");@domenic
    19. 19. move_uploaded_file( $_FILES[userphoto][tmp_name], "/var/www/userphotos/" . $_POST[username] );@domenic
    20. 20. import memcache mc = memcache.Client([127.0.0.1:11211]) mc.set("heavily_used_data", "data") value = mc.get("more_data")@domenic
    21. 21. class Post < ActiveRecord::Base attr_accessible :content, :name, :title validates :name, :presence => true validates :title, :presence => true end@domenic
    22. 22. move this stuff out of the context of the web for a moment@domenic
    23. 23. @domenic
    24. 24. q: how do last-generation web servers fix this problem? a: threads@domenic
    25. 25. let’s talk about threads.@domenic
    26. 26. they suck. the end.@domenic
    27. 27. q: how does node solve this problem? a: javascript@domenic
    28. 28. My next project Im going to write a special thin web server tied to the V8 javascript interpreter The web server will execute javascripts in response to requests in real-time. The beautiful thing about this is that I can lock the users in an evented box where they have no choice but to be fast. They cannot touch the disk. They cannot access a database with some stupid library that blocks because they have no access to blocking I/O. They cannot resize an image by linking imagemagick into the web server process (and thus slowing down/blocking the entire thing). They cannot crash it because they are very limited in what they can do. Why javascript?  because its bare and does not come with I/O APIs  web developers use it already  DOM API is event-based. Everyone is already used to running without threads and on an event loop already. I think this design will be extremely efficient and support very high loads. Web requests are transformed into mysql, memcached, AMQP requests and then return to the event loop. Web developers need this sort of environment where it is not possible for them to do stupid things. Ruby, python, C++, PHP are all terrible languages for web development because they allow too much freedom. http://four.livejournal.com/963421.html@domenic
    29. 29. javascript has never had blocking i/o@domenic
    30. 30. javascript has never had more than one thread@domenic
    31. 31. instead we use callbacks and events@domenic
    32. 32. $.get("http://nodejs.org", function (data) { document.body.innerHTML = data; });@domenic
    33. 33. var dbReq = indexedDB.open("my-database"); dbReq.addEventListener("success", function () { var dbConnection = dbReq.result; });@domenic
    34. 34. it’s the same in node@domenic
    35. 35. fs.readFile("/etc/passwd", function (err, data) { console.log(data); });@domenic
    36. 36. request.on("data", function (chunk) { response.write(chunk); });@domenic
    37. 37. db.users.find({ name: "domenic" }, function (err, users) { users.forEach(function (user) { response.write(user); }); });@domenic
    38. 38. io.sockets.on("connection", function (socket) { socket.emit("news", { hello: "world" }); socket.on("my other event", function (data) { console.log(data); }); });@domenic
    39. 39. low-level@domenic
    40. 40.  STDIO  Timers  Process  Utilities  Events  Domain  Buffer  Stream  Crypto  TLS/SSL  String Decoder File System  Path  Net  UDP/Datagram DNS  HTTP  HTTPS  URL  Query Strings  Punycode  Readline  REPL  VM  Child Processes  Assertion Testing  TTY  ZLIB  OS  Cluster http://nodejs.org/docs/latest/api/@domenic
    41. 41. that’s it. that’s all you get.@domenic
    42. 42. community@domenic
    43. 43. @domenic
    44. 44. codingTime(); https://github.com/domenic/understanding-node@domenic
    1. A particular slide catching your eye?

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

    ×