Presentation is loading. Please wait.

Presentation is loading. Please wait.

Node.JS - Blurring the Line Between Client and Server var title = “ Node.JS - Blurring the Line Between Client and Server ”; $(this).attr(“title”, title);

Similar presentations


Presentation on theme: "Node.JS - Blurring the Line Between Client and Server var title = “ Node.JS - Blurring the Line Between Client and Server ”; $(this).attr(“title”, title);"— Presentation transcript:

1 Node.JS - Blurring the Line Between Client and Server 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’ });

2 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 code o How to node o Package, frameworks and tools o Latest features Q&A

3 JavaScript on the Server Pros It’s JavaScript – it’s the best! It’s fast and easy to scale One language to rule them all o Share code across client/server o 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?

4 ORIGINS Why yet another server framework?

5 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 problem o The race for high throughput and low latency

6 Thread Pool Model responsesrequest queue thread pool thread 1 thread 2 thread 3 thread 4 thread n concurrency = # threads

7 Worker Thread Efficiency wait… route, parse request form db query parse db result form web service query process results form response db queryweb service query log to disk wait…

8 Relative I/O Latency CPU cycles L1 cache3 L2 cache14 RAM250 disk network Relative next room ~5m across the street ~20m next block ~400m Earth circumference distance to the Moon

9 IS THERE A BETTER WAY?

10 Asynchronous I/O 1.Start I/O and return (non-blocking) 2.Perform other tasks 3.When I/O completes, process the result Handle requests in a single thread Popular examples: nginx, lighttpd

11 Node.JS in 5 words Evented I/O for V8 JavaScript

12 Evented Model event queue event loop single-thread user space I/O done network file system other internal thread pool

13 Async Callbacks – Look Familiar? setTimeout(function() { console.log("time's up") }, 1000); console.log('hello') while (true) {}

14 HANDS ON Let’s write some code

15 “Hello, World!” var http = require('http') http.createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}) res.end("hello\n") }).listen(9090)

16 Static HTTP Server var 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)

17 Let’s code Writing a simple blog

18 Module System base64.js var encoding = 'base64‘ // locals are private exports.toBase64 = function(s) { return new Buffer(s).toString(encoding) } app.js var b64 = require('./base64') var a = b64.toBase64('JQueryBulgaria')

19 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 } //... })

20 “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)

21 Callback Hell – the Modern GOTO

22 Avoiding The 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

23 Web App Frameworks Node.JS is powerful o Full control over HTTP server o But most of the time you’ll use a web framework Web App Frameworks like ExpressJS provide: o Routing o Body parsing o Session and Cookie Management o Templating o Static File Server, Logger and many more

24 ExpressJS – Hit Counter var 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)

25 Questions? res.setHeader(“Content-Type”, “text/plain”) res.end(“Bye!”)

26 Thanks to our Sponsors: Diamond Sponsor: Gold Sponsors: Swag Sponsors:Media Partners: Technological Partners: Silver Sponsors: Bronze Partners:


Download ppt "Node.JS - Blurring the Line Between Client and Server var title = “ Node.JS - Blurring the Line Between Client and Server ”; $(this).attr(“title”, title);"

Similar presentations


Ads by Google