module 6 –node.js and sockettodd/cse330/cse330_lecture6.pdf•a javascript runtime environment...

15
1 - CSE 330 – Creative Programming and Rapid Prototyping Module 6 – Node.js and Socket.IO Module 6 Contains 2 components Individual Assignment and Group Assignment • Both are due on Wednesday April 1 st Read the WIKI before starting Portions of today’s slides came from Craig Hecock Iván Loire Roberto Peon Charles Wang 1 2 - CSE 330 – Creative Programming and Rapid Prototyping Preview of Creative Project – Due 4/22/20 Come up with an idea utilizing skills learned from previous modules Should be comparable to work of previous modules You may work alone or in a group on this module Create your Creative Project repo and push to it your project description along with a grading rubric after it is approved by a TA Rubric is due Monday April 6 th by the end of class The project is worth 100 points, 5 of which come from submitting this rubric to Github You are allowed to assign up to 20 points for a creative portion Create a file named gradingRubric.md inside your Github repo Include the name of the TA that approved your rubric 2

Upload: others

Post on 14-Feb-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 11 - CSE 330 – Creative Programming and Rapid Prototyping

Module 6 – Node.js and Socket.IO• Module 6 Contains 2 components

– Individual Assignment and Group Assignment• Both are due on Wednesday April 1st

• Read the WIKI before starting

• Portions of today’s slides came from– Craig Hecock– Iván Loire– Roberto Peon– Charles Wang

1

Extensible Networking Platform 22 - CSE 330 – Creative Programming and Rapid Prototyping

Preview of Creative Project – Due 4/22/20

• Come up with an idea utilizing skills learned from previous modules– Should be comparable to work of previous modules– You may work alone or in a group on this module

• Create your Creative Project repo and push to it your project description along with a grading rubric after it is approved by a TA

• Rubric is due Monday April 6th by the end of class– The project is worth 100 points, 5 of which come from

submitting this rubric to Github• You are allowed to assign up to 20 points for a creative portion• Create a file named gradingRubric.md inside your Github repo• Include the name of the TA that approved your rubric

2

Page 2: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 33 - CSE 330 – Creative Programming and Rapid Prototyping

CSE 503S Performance Evaluation Report

• 503S students will complete a performance evaluation study of their web server

• The evaluation will include two experiments that measure critical resources used throughout the semester

– For example, If my app uses Apache and MySQL• How many pages/sec can Apache serve?• How many reads/sec and writes/sec can my database perform?

– The wiki provides a list of potential experiments

• A performance evaluation proposal is due on April 6th (along with your Creative Project Description)

– Create a Performance Evaluation Repo using the link provided on Piazza– List the experiments you plan to perform and why these are important to study– Create a file inside your Performance Evaluation Repo named

proposalExperiments.md explaining your experiments by April 6th

• Students will submit a written document explaining the experiments along with their results by 11:59 PM on Friday April 24th

• Refer to the course website for additional details about the report– https://classes.engineering.wustl.edu/cse330/index.php/CSE_503S_Performance_Evaluation_Study

3

Extensible Networking Platform 44 - CSE 330 – Creative Programming and Rapid Prototyping

CSE 503S Performance Evaluation Example

4

Page 3: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 55 - CSE 330 – Creative Programming and Rapid Prototyping

What is Node.js?

• A JavaScript runtime environment running Google Chrome’s V8 engine– a.k.a. a server-side solution for JS– Compiles JS, making it really fast

• Runs over the command line

• Designed for high concurrency– Without threads or new processes

• Never blocks, not even for I/O

5

Extensible Networking Platform 66 - CSE 330 – Creative Programming and Rapid Prototyping

Concurrency: The Event Loop

• Instead of threads Node uses an event loop with a stack

• Alleviates overhead of context switching

6

Page 4: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 77 - CSE 330 – Creative Programming and Rapid Prototyping

Non-blocking I/O

• Servers do nothing but I/O– Scripts waiting on I/O requests degrades

performance

• To avoid blocking, Node makes use of the event driven nature of JS by attaching callbacks to I/O requests

• Scripts waiting on I/O waste no space because they get popped off the stack when their non-I/O related code finishes executing

7

Extensible Networking Platform 88 - CSE 330 – Creative Programming and Rapid Prototyping

I/O Example

8

Page 5: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 99 - CSE 330 – Creative Programming and Rapid Prototyping

9

Extensible Networking Platform 1010 - CSE 330 – Creative Programming and Rapid Prototyping

10

Page 6: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 1111 - CSE 330 – Creative Programming and Rapid Prototyping

Threads VS Event-driven

Threads Asynchronous Event-driven

Lock application / request with listener-workers threads

only one thread, which repeatedly fetches an event

Using incoming-request model Using queue and then processes it

multithreaded server might block the request which might involve multiple events

manually saves state and then goes on to process the next event

Using context switching no contention and no context switches

Using multithreadingenvironments where listener and workers threads are used frequently to take an incoming-request lock

Using asynchronous I/O facilities (callbacks, not poll/select or O_NONBLOCK) environments

11

Extensible Networking Platform 1212 - CSE 330 – Creative Programming and Rapid Prototyping

Node.js VS Apache

Platform Number of request per second

PHP ( via Apache) 318,727

Static ( via Apache ) 296,651

Node.js 556,930

12

Page 7: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 1313 - CSE 330 – Creative Programming and Rapid Prototyping

Node.js Hello World (hello.js)

var http = require('http');

http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain'});res.end('Hello, world! ');

}).listen(80);

13

Extensible Networking Platform 1414 - CSE 330 – Creative Programming and Rapid Prototyping

Node.js Examples

14

Page 8: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 1515 - CSE 330 – Creative Programming and Rapid Prototyping

Module 6 Individual Demo

15

Extensible Networking Platform 1616 - CSE 330 – Creative Programming and Rapid Prototyping

Socket.IO

16

Page 9: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 1717 - CSE 330 – Creative Programming and Rapid Prototyping

Web Sockets

• Transport protocol for web communication– Alternative to the XMLHttpRequest object used for AJAX

• Provides Bi-directional, full duplex communication channel

• Designed for implementation in web browsers and servers

• Extremely low overhead for payload, just two bytes

• API standardized by W3C

17

Extensible Networking Platform 1818 - CSE 330 – Creative Programming and Rapid Prototyping

TCP handshakeHTTP Headers (request)

HTTP Headers (response)

“hello, my name is Chrome, encoding UTF-8... I would like a web page please.”

+ +

HTTP Overhead (for each request)

18

Page 10: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 1919 - CSE 330 – Creative Programming and Rapid Prototyping

•Page Load Time (PLT) is our measure of latency.

• Note the diminishing returns as bandwidth increases

Do faster connections help?

19

Extensible Networking Platform 2020 - CSE 330 – Creative Programming and Rapid Prototyping

•Now we vary the Round Trip Time (RTT) for a fixed bandwidth.

•Reducing RTT, always helps reduce Page Load Time (PLT).

Do closer server help?

20

Page 11: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 2121 - CSE 330 – Creative Programming and Rapid Prototyping

data + 2 byte overhead

data + 2 byte overhead

BrowserServer

Web Sockets

TCP handshake(just first request)

• Help reduce the number of Round Trip Times (RTTs)

21

Extensible Networking Platform 2222 - CSE 330 – Creative Programming and Rapid Prototyping

http://caniuse.com/#feat=websockets

22

Page 12: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 2323 - CSE 330 – Creative Programming and Rapid Prototyping

Data from Oct 29th 2014

23

Extensible Networking Platform 2424 - CSE 330 – Creative Programming and Rapid Prototyping

Socket.IO

• Web sockets for all– Web sockets are not supported in all browsers

• Socket IO supports a variety of transports– HTML 5 WebSocket– Flash Socket– AJAX Long Polling– Forever Iframe

24

Page 13: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 2525 - CSE 330 – Creative Programming and Rapid Prototyping

Getting Started with Socket.IO

• Socket.IO: http://socket.io

• Install Socket.IO with npm:– npm install socket.io

Node example using Socket.IO:var app = require('http').createServer(callback); var io = require('socket.io').listen(app); app.listen(8080);

25

Extensible Networking Platform 2626 - CSE 330 – Creative Programming and Rapid Prototyping

Socket.IO Server

io.sockets.on('connection', function (socket) {

socket.emit('Hello from server', { hello: 'world' });

socket.on('Reply from client', function (data) { console.log(data);

}); });

26

Page 14: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 2727 - CSE 330 – Creative Programming and Rapid Prototyping

Socket.IO Client (index.html)

<script src="/socket.io/socket.io.js"></script>

<script> var socket = io.connect('http://localhost'); socket.on('Hello from server', function (data) {

console.log(data);socket.emit('Reply from client', { hello: 'from

client' });});

</script>

27

Extensible Networking Platform 2828 - CSE 330 – Creative Programming and Rapid Prototyping

Simple Socket.IO Demo

28

Page 15: Module 6 –Node.js and Sockettodd/cse330/cse330_lecture6.pdf•A JavaScript runtime environment running Google Chrome’s V8 engine –a.k.a. a server-side solution for JS –Compiles

Extensible Networking Platform 2929 - CSE 330 – Creative Programming and Rapid Prototyping

Simple Chat Server Demo

29