getting started with node - cs50cdn.cs50.net/2011/fall/seminars/node_js/node_js.pdf · getting...
TRANSCRIPT
![Page 1: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/1.jpg)
Getting Started with node.js
Beardsley (“B”) [email protected]
http://ruml.com
1Sunday, November 20, 2011
![Page 2: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/2.jpg)
probably the most exciting new idea
since Ruby on Railsin 2004
2Sunday, November 20, 2011
![Page 3: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/3.jpg)
node.js2009
Ryan Dahl
3Sunday, November 20, 2011
![Page 4: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/4.jpg)
What is node.js?
4Sunday, November 20, 2011
![Page 5: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/5.jpg)
What is node.js?a program execution environment for JS
4Sunday, November 20, 2011
![Page 6: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/6.jpg)
A browser isa program execution environment for JS
5Sunday, November 20, 2011
![Page 7: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/7.jpg)
The Chrome browser isa program execution environment for JS
6Sunday, November 20, 2011
![Page 8: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/8.jpg)
node.js isa program execution environment for JS
with access to the local filesystem7Sunday, November 20, 2011
![Page 9: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/9.jpg)
What is node.js?a program execution environment for JS
with event-driven, non-blocking I/O
8Sunday, November 20, 2011
![Page 10: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/10.jpg)
event-driven:On launch, the program sits in an
event-loop waiting for GUI events to occur; when they do, each event is
placed at the end of an event-queue.
9Sunday, November 20, 2011
![Page 11: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/11.jpg)
event-driven(2):The program removes each event from the head of the queue and “handles” it
by invoking the event-handler functions which have been bound to
the event.
10Sunday, November 20, 2011
![Page 12: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/12.jpg)
“event-handler” ==
“callback”
The program “calls back”when the event occurs.
11Sunday, November 20, 2011
![Page 13: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/13.jpg)
non-blocking I/O:When input is requested (e.g.,
disk-access), the program doesn’t wait for the data from
disk. It continues on with“something else.”
12Sunday, November 20, 2011
![Page 14: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/14.jpg)
non-blocking I/O:The code to be executed when the diskdata is finally available is placed in a“callback function” and that function
is invoked when the data-availableevent occurs.
13Sunday, November 20, 2011
![Page 15: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/15.jpg)
What is node.js?a program execution environment for JS
with event-driven, non-blocking I/Owritten in C++ and incorporating
Google’s V8 JavaScript engine
[also a set of core modules]
14Sunday, November 20, 2011
![Page 16: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/16.jpg)
Why is it so fast as a network server?
In CGI, each request spawns a new thread with a separate instance of the application: new
interpreter, new initializaton, etc.
In node.js, each request triggers a callback within a single thread (small heap memory allocation)which provides an environment
which can save state.
15Sunday, November 20, 2011
![Page 17: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/17.jpg)
Why is node.js “the future” of web applications?
Web evolution:
• a series of linked static pages;• pages which were dynamically generated from a
database (templating);• pages which send significant amounts of new
data and can ask for updates for parts of a page without refreshing the page (Ajax);• pages which need constant communication;
updates without asking; many browsers talking to each other (chat, backchannel);
16Sunday, November 20, 2011
![Page 18: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/18.jpg)
node.js core moduleshttpnetchild_processfsos
sysurlutil. . .
17Sunday, November 20, 2011
![Page 19: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/19.jpg)
require(<module>)
var http = require("http");
[convention: use the same name as module]
18Sunday, November 20, 2011
![Page 20: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/20.jpg)
a web server in node:
19Sunday, November 20, 2011
![Page 21: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/21.jpg)
a web server in node:
19Sunday, November 20, 2011
![Page 22: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/22.jpg)
a web server in node:
19Sunday, November 20, 2011
![Page 23: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/23.jpg)
what does the call tocreateServer() do?
20Sunday, November 20, 2011
![Page 24: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/24.jpg)
what does the call tocreateServer() do?
It binds the event-handler function (passed as the parameter) with the
incoming-HTTP-request event.
20Sunday, November 20, 2011
![Page 25: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/25.jpg)
a web server in node:
but we can chain our calls!
21Sunday, November 20, 2011
![Page 26: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/26.jpg)
a web server in node:
22Sunday, November 20, 2011
![Page 27: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/27.jpg)
a web server in node:
what’s wrong here?
22Sunday, November 20, 2011
![Page 28: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/28.jpg)
a web server in node:
23Sunday, November 20, 2011
![Page 29: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/29.jpg)
the serverResponse object:
24Sunday, November 20, 2011
![Page 30: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/30.jpg)
the serverRequest object:
25Sunday, November 20, 2011
![Page 31: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/31.jpg)
let’s log the requests:
26Sunday, November 20, 2011
![Page 32: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/32.jpg)
let’s log the requests:
27Sunday, November 20, 2011
![Page 33: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/33.jpg)
let’s serve a static file:
28Sunday, November 20, 2011
![Page 34: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/34.jpg)
let’s serve a static file:
29Sunday, November 20, 2011
![Page 35: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/35.jpg)
let’s serve a static file:
30Sunday, November 20, 2011
![Page 36: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/36.jpg)
Web App Framework:Express
31Sunday, November 20, 2011
![Page 37: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/37.jpg)
A Chat Application
(the “demo app” of node.js)
32Sunday, November 20, 2011
![Page 38: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/38.jpg)
How does chat work?
Joe, Sue and Bob all go to the same URL. They navigate to the same “chat room.”
33Sunday, November 20, 2011
![Page 39: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/39.jpg)
How does chat work?
34Sunday, November 20, 2011
![Page 40: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/40.jpg)
How does chat work?1. When anyone sends a message, the sender’s ID and the message are displayed in the browsers of all. (In the sender’s browser, the sender is “you.”)
34Sunday, November 20, 2011
![Page 41: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/41.jpg)
How does chat work?
2. When a new person enters (or leaves) the room, everyone else is notified.
1. When anyone sends a message, the sender’s ID and the message are displayed in the browsers of all. (In the sender’s browser, the sender is “you.”)
34Sunday, November 20, 2011
![Page 42: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/42.jpg)
How does chat work?
2. When a new person enters (or leaves) the room, everyone else is notified.
3. The newcomer is sent the most recent messages.
1. When anyone sends a message, the sender’s ID and the message are displayed in the browsers of all. (In the sender’s browser, the sender is “you.”)
34Sunday, November 20, 2011
![Page 43: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/43.jpg)
This isn’t typical client-server!
This requires a: permanently-open bidirectionalchannel.
35Sunday, November 20, 2011
![Page 44: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/44.jpg)
Before HTML5: hacks!
long pollingflash
36Sunday, November 20, 2011
![Page 45: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/45.jpg)
After HTML5:
websockets!
(a permanently-open bidirectional channel)
37Sunday, November 20, 2011
![Page 46: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/46.jpg)
websockets for node.js:
socket.io!
5 different transports(including long polling and flash)
38Sunday, November 20, 2011
![Page 47: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/47.jpg)
JavaScript object syntax:
{ firstName: “John”, lastName: “Brown”, age: 23, children: [ “Sue”, “Bob”], birthdate: [ 1994, 12, 25 ]}
39Sunday, November 20, 2011
![Page 48: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/48.jpg)
back to the chat app:
What messages do we need to send?
40Sunday, November 20, 2011
![Page 49: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/49.jpg)
What messages do we need to send?1. When anyone sends a message, the sender’s ID and the message are displayed in the browsers of all. (In the sender’s browser, the sender is “you.”)
Message from the sender’s browser:<body>
{ message: [<author>, <body>] }Message from the server to others:
41Sunday, November 20, 2011
![Page 50: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/50.jpg)
What messages do we need to send?
Message from the server to others:
2. When a new person enters (or leaves) the room, everyone else is notified.
{ announcement: <text> }
42Sunday, November 20, 2011
![Page 51: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/51.jpg)
What messages do we need to send?
Message from the server to newcomer:
3. The newcomer is sent the most recent messages.
{ buffer: [ <msg>, <msg>, ... ] }
43Sunday, November 20, 2011
![Page 52: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/52.jpg)
Chat app messages summary:
{ buffer: [ <msg>, <msg>, ... ] }
{ announcement: <text> }
{ message: [<author>, <body>] }
Messages from the server:
Messages from the browser:<body>
44Sunday, November 20, 2011
![Page 53: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/53.jpg)
What has to happen on the server?1. Listen for attempts to connect.
2. When a connection occurs: - create a client object and assign an ID; - bind event-handlers to the events of the client: 1) receipt-of-a-message and 2) disconnecton3. The message event-handler needs to: - add the client’s ID as author; - package author and body into a message object; - sent the message object to everyone else.
45Sunday, November 20, 2011
![Page 54: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/54.jpg)
Let’s look at the server code:
46Sunday, November 20, 2011
![Page 55: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/55.jpg)
What has to happen on the browser?1. Create a socket object and send a connection request to the server.
2. Bind event-handler to receipt-of-message event.
3. The message event-handler needs to: - for buffer objects: add to chat window in a loop; - otherwise just add to chat window.
47Sunday, November 20, 2011
![Page 56: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/56.jpg)
Let’s look at the browser code:
48Sunday, November 20, 2011
![Page 57: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/57.jpg)
backchannel
A variation on chat: posts (typically questions for a lecturer) are voted on by all and can be displayed in order of popularity.
http://github.com/bruml2/backchannel
49Sunday, November 20, 2011
![Page 58: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/58.jpg)
node.js installationhttp://nodejs.org
50Sunday, November 20, 2011
![Page 59: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/59.jpg)
node.js documentationhttp://nodejs.org/docs/v0.6.2/api/all.html
51Sunday, November 20, 2011
![Page 60: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/60.jpg)
node.js directorynodecloud.org
52Sunday, November 20, 2011
![Page 61: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/61.jpg)
node.js tutorialsThe Node Beginner Bookhttp://nodebeginner.org
53Sunday, November 20, 2011
![Page 62: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/62.jpg)
node.js tutorialsMastering Node
http://visionmedia.github.com/masteringnode/book.html
54Sunday, November 20, 2011
![Page 63: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/63.jpg)
node.js tutorialsNode Tuts screencastshttp://nodetuts.com
55Sunday, November 20, 2011
![Page 64: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/64.jpg)
node.js tutorialsHow To Node
http://howtonode.org
56Sunday, November 20, 2011
![Page 65: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/65.jpg)
node.js booksNode.js in Action (Manning)
57Sunday, November 20, 2011
![Page 66: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/66.jpg)
node.js booksHands-on node.js
60 pages (of 118) freehttp://nodetuts.com
58Sunday, November 20, 2011
![Page 67: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/67.jpg)
node.js booksNode Web Development (Packt)
not so good!
59Sunday, November 20, 2011
![Page 68: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/68.jpg)
node.js HostingJoyent (no.de)
NodejitsuNodesterHeroku
easy; cheap;
60Sunday, November 20, 2011
![Page 69: Getting Started with node - CS50cdn.cs50.net/2011/fall/seminars/Node_js/Node_js.pdf · Getting Started with node.js Beardsley (“B”) Ruml b@ruml.com Sunday, November 20, 2011 1](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab13b1f7f8b9a00728c10e1/html5/thumbnails/69.jpg)
Thanks for listening!
61Sunday, November 20, 2011