Post on 05-Jul-2015
description
<technologies-web/>
<meta name="author" content="Pierre-Emmanuel Altieri, Clément Casu, Oussama Ezzayer, Raphaël Kiffer">
Menu du jour
27/05/2009 Ryan Dahl 0.1.33
Ils y croient
2011 Tim Fox 2.1.4
Ils y croient
The C10k Problem
Le c10k […] est un code numérique utilisé pour exprimer la limitation que la plupart des serveurs ont en termes de
connexions réseaux.
http://fr.wikipedia.org/wiki/C10k_problem
« Origins »
Reactor
Vérification
Événement
Exécution
Callback
Requête Web ou callback
Choix de l’événement
Exécution de l’événement
Lancement de callback avec données
Programmation événementielle
boucle principale
Event Loop
Programmation événementielle
fs = require('fs');
var data = fs.readFileSync('file.txt')
// Le flot d’exécution est bloqué jusqu’à la fin de l’exécution
console.log(data)
fs = require('fs');
fs.readFile('file.txt', function(error, data) {
// Exécution à la fin de l’opérationconsole.log(data)});
Avant/Après
Serveur
Thread Thread ThreadThread
Requête Requête RequêteRequête
Avant/Après
Serveur
Thread
Requête Requête RequêteRequête
Avant/Après
Reactive Programming
Responsive Élastique
Event-drivenScalable
Réactif en terme d’UI
Réactif aux erreurs
Réactif aux événements
Réactif à la charge
Bootstrap
var vertx = require('vertx');
vertx.createHttpServer().requestHandler(function(req) {
var file = req.path() === '/' ? 'index.html' : req.path();
req.response.sendFile('app/' + file);}).listen(8080);
console.log('Server is running');
$ node server.js
var http = require('http');
http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain‘
}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1');
console.log('Server is running');
$ vertx run server.js
Bootstrap
$ node server.js
var http = require('http');
http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain‘
}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1');
console.log('Server is running');
$ vertx run Server.java
public class Server extends Verticle {public void start() {
vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {
public void handle(HttpServerRequest req) {String file = req.path().equals("/") ?
"index.html" : req.path();req.response().sendFile("app/" + file);}
}).listen(8080);}
}
Bootstrap
$ node server.js
var http = require('http');
http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain‘
}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1');
console.log('Server is running');
$ vertx run server.rb
require "vertx"
Vertx::HttpServer.new.request_handler do |req|file = req.uri == "/" ? "index.html" : req.urireq.response.send_file "webroot/#{file}"
end.listen(8080)
Bootstrap
$ node server.js
var http = require('http');
http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain‘
}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1');
console.log('Server is running');
$ vertx run Server.groovy
vertx.createHttpServer().requestHandler { req ->def file = req.uri == "/" ? "index.html" : req.urireq.response.sendFile "app/$file"
}.listen(8080)
Bootstrap
$ node server.js
var http = require('http');
http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain‘
}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1');
console.log('Server is running');
$ vertx run server.py
import vertx
server = vertx.create_http_server()
@server.request_handlerdef request_handler(req):
file = "index.html" if req.uri == "/" else req.urireq.response.send_file("app/%s"%file)
server.listen(8080)
Versus
Environnement Modules
npm
Verticles Event Bus
Shared Data 1 processWorkflow
Et les performances ?
0
200
400
600
800
1000
1200
1400
1600
1800
2000
Ajout JSON Hello World Concatenation String Fibo(30) recursif
NodeJS (tr/s) Vert.X (tr/s) NodeJS (mem) Vert.X (mem)
Merci !