Upload
azia
View
33
Download
0
Embed Size (px)
DESCRIPTION
var title = “ Node.JS - Blurring the Line Between Client and Server ”;. $(this).attr(“title”, title); $(this).data( { font: ‘Segoe UI’ , size: ‘30pt’ , maxLines : ‘3 lines max’ } );. Agenda. Why Node.JS? Why yet another server framework? What is it? - PowerPoint PPT Presentation
Citation preview
var title = “Node.JS - Blurring the Line Between Client and Server”;$(this).attr(“title”, title);$(this).data({
font: ‘Segoe UI’, size: ‘30pt’, maxLines: ‘3 lines max’
});
Agenda• Why Node.JS?
o Why yet another server framework?• What is it?
o Asynchronous IO and the Evented Model• Hands On
o Let’s write some codeo How to nodeo Package, frameworks and toolso Latest features
• Q&A
JavaScript on the ServerPros
• It’s JavaScript – it’s the best!• It’s fast and easy to scale• One language to rule them
allo Share code across
client/servero Never write serialization
code again – it’s all JSON• Never debug multithreaded
code again
• More?
Cons• It’s JavaScript – is it even a
real language?• Async programming – can
be unfamiliar and hard• Nested callback hell• Single process doesn’t
scale across cores
• More?
ORIGINSWhy yet another server framework?
Evolution of Socket Servers• In the beginning was CGI
o A new process per request• Worker Pool Model
o Dispatch requests to persistent worker pool• To infinity and beyond
o The C10k problemo The race for high throughput and low latency
Thread Pool Model
responsesrequest queue
thread poolthread 1
thread 2
thread 3
thread 4
thread n
concurrency = # threads
Worker Thread Efficiency
wait… wait… wait…
route, parse requestform db query
parse db resultform web service query
process results
form response
db query web servicequery
log to disk
wait… wait… wait…
wait… wait… wait…wait… wait… wait…
Relative I/O Latency
CPU cycles
L1 cache 3
L2 cache 14
RAM 250
disk 41 000 000
network 240 000 000
Relative
next room ~5m
across the street ~20m
next block ~400m
Earth circumference
distance to the Moon
IS THERE A BETTER WAY?
Asynchronous I/O1. Start I/O and return (non-blocking)2. Perform other tasks3. When I/O completes, process the result
• Handle requests in a single thread• Popular examples: nginx, lighttpd
Node.JS in 5 words
Evented I/O for V8 JavaScript
Evented Model
eventqueue
eventloop
single-thread
user space
I/O done
network
file system
other
internalthread pool
Async Callbacks – Look Familiar?setTimeout(function() { console.log("time's up")}, 1000); console.log('hello')
while (true) {}
HANDS ONLet’s write some code
“Hello, World!”var http = require('http') http.createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}) res.end("hello\n") }).listen(9090)
Static HTTP Servervar http = require('http')var fs = require('fs') http.createServer(function(req, res) { fs.readFile('index.html', function(err, data) { if (err) { res.writeHead(500) res.end() } else { res.end(data) } })}).listen(9090)
Let’s codeWriting a simple blog
Module System
base64.jsvar encoding = 'base64‘ // locals are private exports.toBase64 = function(s) { return new Buffer(s).toString(encoding)}
app.jsvar b64 = require('./base64') var a = b64.toBase64('JQueryBulgaria')
Error Handling• Asynchronous Callbacks and Exceptions• Dude, where is my stack?• Cannot debug across event loop iterations
• Async callback error code convention• First callback parameter is error object
fs.readFile(path, function(err, file) { if (err) { // handle error } //...})
“Do, or do not. There is no try.”
• Reconsider the conventional wisdom of exception handling• Exceptions are cleaner, more elegant and…
wrong
• Hidden control flow and Corrupt State• Just because you don’t see a code path doesn’t
mean it doesn’t exist
• New generation of languages shun exceptions (like Go)
Callback Hell – the Modern GOTO
AvoidingThe Callback Pyramid of Doom
• Keep it shallow• Name your anonymous functions• Avoid nesting
• Use a functional programming helper module• async, underscore (both server and client)
• Other alternatives• Promises• Fibers
Web App Frameworks• Node.JS is powerful
o Full control over HTTP servero But most of the time you’ll use a web
framework• Web App Frameworks like ExpressJS
provide:o Routingo Body parsingo Session and Cookie Managemento Templatingo Static File Server, Logger and many more
ExpressJS – Hit Countervar express = require('express')var app = express(); app.use(express.cookieParser());app.use(express.cookieSession({secret: "dG9wc2VjcmV0"})); app.use(function(req, res) { var sess = req.session sess.hits = sess.hits || 0 sess.hits++ res.json({ visits: sess.hits })}); app.listen(80)
Questions?
res.setHeader(“Content-Type”, “text/plain”)res.write(“[email protected]\n”)res.end(“Bye!”)
Thanks to our Sponsors:Diamond Sponsor:
Gold Sponsors:
Swag Sponsors: Media Partners:
Technological Partners:
Silver Sponsors:
Bronze Partners: