sos11-1i4-hands-on-node-js-111205144521-phpapp01.pdf

April 30, 2018 | Author: arrebolando | Category: Computing, Technology, Software Engineering, Web Development, Software


Comments



Description

cocktail d’expérience informatiquesGenève 3 & 4 octobre 2011 Seconde édition Track Auteur Session Incubateur M. LEMEE & R. MATON Node.js Node.js http://nodejs.org Co-founder of Duchess France http://www.java-freelance.fr @MathildeLemee Creator of Web Tambouille http://www.web-tambouille.fr @rmat0n Summary • What ? Why ? • Non blocking API example • Event programming model • Express, Socket.IO and modules • Mini Hands On • Unit Test • Limits What is Node ? Server-side Javascript Node.js javascript implementation is V8 Javascript Engine (Google Chrome) Provide an easy way to build scalable network programs Non blocking I/O Single Threaded Written by Ryah Dahl What is Node ? http://codingrelic.geekhold.com/2010/08/nodejs-from-30000-feet.html What is Node ? var http = require('http'); http.createServer(function (request, response) { res.writeHead(200, {"Content-Type": "text/plain"}); res.end("Hello World\n"); }).listen(1337, "127.0.0.1"); console.log("Server running at http://127.0.0.1:1337/"); ~$ node server.js ~$ curl http://127.0.0.1:1337/ Why using Node ? • Ryan Dahl: "Node.js project: To provide a purely evented, non-blocking infrastructure to script highly concurrent programs" (http://yuilibrary.com/theater/ryan-dahl/dahl-node/) • Scalable software • Non blocking I/O • Same language and share code between server side and client side • JSON friendly (web, server, database...) Blocking API example print("hello"); sleep(2000); print("world"); blocked!! Non blocking API example var data = File.read("file.txt"); ... // Here you have to wait... maybe a lot... ... // And your thread is still alive... doing nothing... ... parseResult(data); Non blocking API example var data = File.read("file.txt", function(data) { parseResult(data); }); // Here, your thread is alive and continue working !!! myOtherCode(); Event programming model • Events are the heart of Node.js • Everything is event based • You can create yours own events Event programming model Sample dummyEmitter.emit('myCustomEvent', 'myValue'); dummyReceiver.on('myCustomEvent', function(data){ console.log(data); }); Event programming model Sample socket.emit('news', { hello: 'world' }); socket.on('event', function (data) { console.log(data); }); SERVEUR CLIENT socket.on('news', function (data) { console.log(data); socket.emit('event', { my: 'data' }); }); NPM Modules Node Boilerplate Event Emitter 2 Underscore Vows Coffeemate Node Inspector Spotify, Twitter, Gravatar, Dropbox, AWS, https://github.com/joyent/node/wiki/modules Express var app = express.createServer(); app.get('/', function(req, res) { res.send('Hello World'); }); app.listen(3000); Web Framework Inspired by Sinatra (Ruby) Systèmes de templates (jade, Haml, EJS...) Express app.configure('development', function() { server.set('views', __dirname + '/views'); server.set('view engine', 'ejs'); app.use(express.static(__dirname + '/public')); app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function() { server.set('views', __dirname + '/views'); server.set('view engine', 'ejs'); var aYear = 31557600000; app.use(express.static(__dirname + '/public', { 'maxAge': aYear })); app.use(express.errorHandler()); }); Express app.get('/user/:id', function(req, res) { res.send('user' + req.params.id); }); '/users/:id?' /users/5 /users '/user/:id.:format?' /user/12 /user/12.json '/user/:id/:operation?' /user/1 /user/1/edit '/files/*' /files/jquery.js /files/javascripts/jquery.js Socket.IO - Why ? WebSocket : Firefox 4, Chrome 4, Opera 10.70, and Safari 5. Asynchronous communication from client to server. AJAX - XmlHttpRequest ? Flash / AJAX Long Polling Disconnection Socket.IO - How var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { io.sockets.emit('info', 'a player join the game'); socket.on('chat', function (msg) { console.log('send a chat', msg); }); socket.on('disconnect', function () { sockets.emit('user disconnected'); }); }); Socket.IO - How <script> var socket = io.connect('http://localhost'); socket.on('connect', function () { socket.on('info', function (data) { alert(data); }); }); socket.emit('chat',myMessage); </script> Socket.IO - How • custom messages : socket.emit('my custom event',{data:xxx}); • volatile : socket.volatile.emit('tweet',tweet); • acknoledgements • broadcast : socket.broadcast.emit('hello','world'); • room : socket.join('justin bieber fans') • send a message in a room : io.sockets.in('my room').emit('hello','world'); • storing data : socket.set('name','Mathilde',function () { //callback }); Modules Create yours ! hello.js var world = function() { alert("helloworld"); }; exports.world = world; server.js var hello = require("./hello") hello.world(); Mini Hands On Go Mathilde \o/ Tests MLE • Unit tests o Node.js provides its own assert module http://nodejs.org/docs/v0.5.6/api/assert.html o QUnit (JQuery) http://docs.jquery.com/Qunit o NodeUnit https://github.com/caolan/nodeunit o Expresso https://github.com/visionmedia/expresso • Integration tests o Zombie.js http://zombie.labnotes.org • Behavior Driven Development o vowsjs http://vowsjs.org/ o jasmine-node https://github.com/mhevery/jasmine-node • https://github.com/joyent/node/wiki/modules#wiki-testing Unit Tests with QUnit <script> $(document) .ready( function() { module("1. Game"); test( "Connais la valeur du joueur suivant en fonction du joueur actuel", function() { game = new Game(); game.take(3); game.take(1); equals(game.otherPlayer(), "O", "O est le joueur précédent"); }); ... </script> Unit Tests with QUnit Limits - Cryptic error messages node.js:50 throw e; ^ Error: ECONNREFUSED, Connection refused at IOWatcher.callback (net:870:22) at node.js:607:9 client.on("error", function (err) { console.log("Error " + err); }); Limits - Cryptic error messages - Only one thread (it is also an advantage) - Can be difficult to read - Non async lib/third party decrease perfs - IDE, Tooling, Debugger, Profiler - How to choose a good module ? Node REPL ~$ node > 1+2 3 > [1, 2, 3].splice(1,2) [2, 3] > process.pid 2998 > ... Links Quick tour : http://www.slideshare.net/the_undefined/nodejs-a-quick-tour Node + Websockets : http://www.slideshare.net/the_undefined/nodejs-a-quick-tour Node beginner : http://nodebeginner.org/ The Node Beginner Book : https://github.com/ManuelKiessling/NodeBeginnerBook Hands on Node.js : http://nodetuts.com/handson-nodejs-book.html Node.js in Action (été 2012): http://www.manning.com/cantelon
Copyright © 2024 DOKUMEN.SITE Inc.