Node.js – Stand-Up Präesentation Webmontag Ulm

80
1 / 25 node.js Serverseitiges JavaScript für skalierbare Netzwerkanwendungen Benjamin Erb 31. Mai 2010

Transcript of Node.js – Stand-Up Präesentation Webmontag Ulm

Page 1: Node.js – Stand-Up Präesentation Webmontag Ulm

1 / 25

node.js

Serverseitiges JavaScript für skalierbare

Netzwerkanwendungen

Benjamin Erb

31. Mai 2010

Page 2: Node.js – Stand-Up Präesentation Webmontag Ulm

2 / 25

KURZE PERSÖNLICHE VORSTELLUNG

I Student der Medieninformatik (Uni Ulm)

I Interessenschwerpunkte

I Verteilte Systeme

I Ubiquitous Computing

I Web-Technologien

Page 3: Node.js – Stand-Up Präesentation Webmontag Ulm

2 / 25

KURZE PERSÖNLICHE VORSTELLUNG

I Student der Medieninformatik (Uni Ulm)

I Interessenschwerpunkte

I Verteilte Systeme

I Ubiquitous Computing

I Web-Technologien

Page 4: Node.js – Stand-Up Präesentation Webmontag Ulm

3 / 25

NODE.JS

Node’s goal is to provide an easy way to

build scalable network programs.

Almost no function in Node directly performs

I/O, so the process never blocks.

Quelle: http://nodejs.org/#about

Page 5: Node.js – Stand-Up Präesentation Webmontag Ulm

3 / 25

NODE.JS

Node’s goal is to provide an easy way to

build scalable network programs.

Almost no function in Node directly performs

I/O, so the process never blocks.

Quelle: http://nodejs.org/#about

Page 6: Node.js – Stand-Up Präesentation Webmontag Ulm

4 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

SQL-Abfrage unter Java:

1 Statement s = conn.createStatement();

2 s.executeQuery("SELECT id FROM users");

3 ResultSet rs = s.getResultSet();

4 //Resultat verwenden

I Operation blockiertI evtl. Multithreading

Page 7: Node.js – Stand-Up Präesentation Webmontag Ulm

4 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

SQL-Abfrage unter Java:

1 Statement s = conn.createStatement();

2 s.executeQuery("SELECT id FROM users");

3 ResultSet rs = s.getResultSet();

4 //Resultat verwenden

I Operation blockiert

I evtl. Multithreading

Page 8: Node.js – Stand-Up Präesentation Webmontag Ulm

4 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

SQL-Abfrage unter Java:

1 Statement s = conn.createStatement();

2 s.executeQuery("SELECT id FROM users");

3 ResultSet rs = s.getResultSet();

4 //Resultat verwenden

I Operation blockiertI evtl. Multithreading

Page 9: Node.js – Stand-Up Präesentation Webmontag Ulm

5 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

I blockierende Aufrufe verschenken CPU-Cycles

I I/O RAM: 250 Cycles

I I/O Festplatte: 41.000.000 Cycles

I I/O Netzwerk: 240.000.000 Cycles

I Multithreading

I Kontextwechsel kosten ebenfalls Cycles

I Execution Stacks verbrauchen Speicher

I extrem anspruchsvoll korrekt zu implementieren

Page 10: Node.js – Stand-Up Präesentation Webmontag Ulm

5 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

I blockierende Aufrufe verschenken CPU-Cycles

I I/O RAM: 250 Cycles

I I/O Festplatte: 41.000.000 Cycles

I I/O Netzwerk: 240.000.000 Cycles

I Multithreading

I Kontextwechsel kosten ebenfalls Cycles

I Execution Stacks verbrauchen Speicher

I extrem anspruchsvoll korrekt zu implementieren

Page 11: Node.js – Stand-Up Präesentation Webmontag Ulm

5 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

I blockierende Aufrufe verschenken CPU-Cycles

I I/O RAM: 250 Cycles

I I/O Festplatte: 41.000.000 Cycles

I I/O Netzwerk: 240.000.000 Cycles

I Multithreading

I Kontextwechsel kosten ebenfalls Cycles

I Execution Stacks verbrauchen Speicher

I extrem anspruchsvoll korrekt zu implementieren

Page 12: Node.js – Stand-Up Präesentation Webmontag Ulm

5 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

I blockierende Aufrufe verschenken CPU-Cycles

I I/O RAM: 250 Cycles

I I/O Festplatte: 41.000.000 Cycles

I I/O Netzwerk: 240.000.000 Cycles

I Multithreading

I Kontextwechsel kosten ebenfalls Cycles

I Execution Stacks verbrauchen Speicher

I extrem anspruchsvoll korrekt zu implementieren

Page 13: Node.js – Stand-Up Präesentation Webmontag Ulm

5 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

I blockierende Aufrufe verschenken CPU-Cycles

I I/O RAM: 250 Cycles

I I/O Festplatte: 41.000.000 Cycles

I I/O Netzwerk: 240.000.000 Cycles

I Multithreading

I Kontextwechsel kosten ebenfalls Cycles

I Execution Stacks verbrauchen Speicher

I extrem anspruchsvoll korrekt zu implementieren

Page 14: Node.js – Stand-Up Präesentation Webmontag Ulm

5 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

I blockierende Aufrufe verschenken CPU-Cycles

I I/O RAM: 250 Cycles

I I/O Festplatte: 41.000.000 Cycles

I I/O Netzwerk: 240.000.000 Cycles

I Multithreading

I Kontextwechsel kosten ebenfalls Cycles

I Execution Stacks verbrauchen Speicher

I extrem anspruchsvoll korrekt zu implementieren

Page 15: Node.js – Stand-Up Präesentation Webmontag Ulm

5 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

I blockierende Aufrufe verschenken CPU-Cycles

I I/O RAM: 250 Cycles

I I/O Festplatte: 41.000.000 Cycles

I I/O Netzwerk: 240.000.000 Cycles

I Multithreading

I Kontextwechsel kosten ebenfalls Cycles

I Execution Stacks verbrauchen Speicher

I extrem anspruchsvoll korrekt zu implementieren

Page 16: Node.js – Stand-Up Präesentation Webmontag Ulm

5 / 25

MOTIVATION: BLOCKIERENDE AUFRUFE

I blockierende Aufrufe verschenken CPU-Cycles

I I/O RAM: 250 Cycles

I I/O Festplatte: 41.000.000 Cycles

I I/O Netzwerk: 240.000.000 Cycles

I Multithreading

I Kontextwechsel kosten ebenfalls Cycles

I Execution Stacks verbrauchen Speicher

I extrem anspruchsvoll korrekt zu implementieren

Page 17: Node.js – Stand-Up Präesentation Webmontag Ulm

6 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

Abfrage in Node.js (Pseudo-Aufruf):

1 db.executeStatement("SELECT id FROM users", function(resultSet){

2 //Resultat verwenden

3 });

4 //...

I Aufruf blockiert nichtI Callbackfunktion als ParameterI Ausführung des Callbacks bei Beendigung der

Operation

Page 18: Node.js – Stand-Up Präesentation Webmontag Ulm

6 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

Abfrage in Node.js (Pseudo-Aufruf):

1 db.executeStatement("SELECT id FROM users", function(resultSet){

2 //Resultat verwenden

3 });

4 //...

I Aufruf blockiert nicht

I Callbackfunktion als ParameterI Ausführung des Callbacks bei Beendigung der

Operation

Page 19: Node.js – Stand-Up Präesentation Webmontag Ulm

6 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

Abfrage in Node.js (Pseudo-Aufruf):

1 db.executeStatement("SELECT id FROM users", function(resultSet){

2 //Resultat verwenden

3 });

4 //...

I Aufruf blockiert nichtI Callbackfunktion als Parameter

I Ausführung des Callbacks bei Beendigung derOperation

Page 20: Node.js – Stand-Up Präesentation Webmontag Ulm

6 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

Abfrage in Node.js (Pseudo-Aufruf):

1 db.executeStatement("SELECT id FROM users", function(resultSet){

2 //Resultat verwenden

3 });

4 //...

I Aufruf blockiert nichtI Callbackfunktion als ParameterI Ausführung des Callbacks bei Beendigung der

Operation

Page 21: Node.js – Stand-Up Präesentation Webmontag Ulm

7 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

I Bibliotheken für nicht-blockierende Aufrufe

I Java: java.nio

I Perl: IO::AIO

I . . .

I Probleme

I Vorbehalte von Entwicklern

I anderes Programmiermodell

I geringe Verfügbarkeit von Bibliotheken

Page 22: Node.js – Stand-Up Präesentation Webmontag Ulm

7 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

I Bibliotheken für nicht-blockierende Aufrufe

I Java: java.nio

I Perl: IO::AIO

I . . .

I Probleme

I Vorbehalte von Entwicklern

I anderes Programmiermodell

I geringe Verfügbarkeit von Bibliotheken

Page 23: Node.js – Stand-Up Präesentation Webmontag Ulm

7 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

I Bibliotheken für nicht-blockierende Aufrufe

I Java: java.nio

I Perl: IO::AIO

I . . .

I Probleme

I Vorbehalte von Entwicklern

I anderes Programmiermodell

I geringe Verfügbarkeit von Bibliotheken

Page 24: Node.js – Stand-Up Präesentation Webmontag Ulm

7 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

I Bibliotheken für nicht-blockierende Aufrufe

I Java: java.nio

I Perl: IO::AIO

I . . .

I Probleme

I Vorbehalte von Entwicklern

I anderes Programmiermodell

I geringe Verfügbarkeit von Bibliotheken

Page 25: Node.js – Stand-Up Präesentation Webmontag Ulm

7 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

I Bibliotheken für nicht-blockierende Aufrufe

I Java: java.nio

I Perl: IO::AIO

I . . .

I Probleme

I Vorbehalte von Entwicklern

I anderes Programmiermodell

I geringe Verfügbarkeit von Bibliotheken

Page 26: Node.js – Stand-Up Präesentation Webmontag Ulm

7 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

I Bibliotheken für nicht-blockierende Aufrufe

I Java: java.nio

I Perl: IO::AIO

I . . .

I Probleme

I Vorbehalte von Entwicklern

I anderes Programmiermodell

I geringe Verfügbarkeit von Bibliotheken

Page 27: Node.js – Stand-Up Präesentation Webmontag Ulm

7 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

I Bibliotheken für nicht-blockierende Aufrufe

I Java: java.nio

I Perl: IO::AIO

I . . .

I Probleme

I Vorbehalte von Entwicklern

I anderes Programmiermodell

I geringe Verfügbarkeit von Bibliotheken

Page 28: Node.js – Stand-Up Präesentation Webmontag Ulm

7 / 25

MOTIVATION: NICHT-BLOCKIERENDE AUFRUFE

I Bibliotheken für nicht-blockierende Aufrufe

I Java: java.nio

I Perl: IO::AIO

I . . .

I Probleme

I Vorbehalte von Entwicklern

I anderes Programmiermodell

I geringe Verfügbarkeit von Bibliotheken

Page 29: Node.js – Stand-Up Präesentation Webmontag Ulm

8 / 25

NODE.JS — ÜBERBLICK

I JavaScript

I Asynchrone I/O Operationen

I Eventbasiert / Eventloop

I API für Datei-, Netzwerkoperationen, HTTP, etc.

Page 30: Node.js – Stand-Up Präesentation Webmontag Ulm

8 / 25

NODE.JS — ÜBERBLICK

I JavaScript

I Asynchrone I/O Operationen

I Eventbasiert / Eventloop

I API für Datei-, Netzwerkoperationen, HTTP, etc.

Page 31: Node.js – Stand-Up Präesentation Webmontag Ulm

8 / 25

NODE.JS — ÜBERBLICK

I JavaScript

I Asynchrone I/O Operationen

I Eventbasiert / Eventloop

I API für Datei-, Netzwerkoperationen, HTTP, etc.

Page 32: Node.js – Stand-Up Präesentation Webmontag Ulm

8 / 25

NODE.JS — ÜBERBLICK

I JavaScript

I Asynchrone I/O Operationen

I Eventbasiert / Eventloop

I API für Datei-, Netzwerkoperationen, HTTP, etc.

Page 33: Node.js – Stand-Up Präesentation Webmontag Ulm

9 / 25

WIESO ÜBERHAUPT JAVASCRIPT?

I interessante Sprachkonstrukte

I anonyme Funktionen

I Closures

I Funktionen als Variablen

I JavaScript unterstützt intrinsisch event-basierte

Programmierung

I vgl. client-seitiges AJAX

Page 34: Node.js – Stand-Up Präesentation Webmontag Ulm

9 / 25

WIESO ÜBERHAUPT JAVASCRIPT?

I interessante Sprachkonstrukte

I anonyme Funktionen

I Closures

I Funktionen als Variablen

I JavaScript unterstützt intrinsisch event-basierte

Programmierung

I vgl. client-seitiges AJAX

Page 35: Node.js – Stand-Up Präesentation Webmontag Ulm

9 / 25

WIESO ÜBERHAUPT JAVASCRIPT?

I interessante Sprachkonstrukte

I anonyme Funktionen

I Closures

I Funktionen als Variablen

I JavaScript unterstützt intrinsisch event-basierte

Programmierung

I vgl. client-seitiges AJAX

Page 36: Node.js – Stand-Up Präesentation Webmontag Ulm

9 / 25

WIESO ÜBERHAUPT JAVASCRIPT?

I interessante Sprachkonstrukte

I anonyme Funktionen

I Closures

I Funktionen als Variablen

I JavaScript unterstützt intrinsisch event-basierte

Programmierung

I vgl. client-seitiges AJAX

Page 37: Node.js – Stand-Up Präesentation Webmontag Ulm

9 / 25

WIESO ÜBERHAUPT JAVASCRIPT?

I interessante Sprachkonstrukte

I anonyme Funktionen

I Closures

I Funktionen als Variablen

I JavaScript unterstützt intrinsisch event-basierte

Programmierung

I vgl. client-seitiges AJAX

Page 38: Node.js – Stand-Up Präesentation Webmontag Ulm

9 / 25

WIESO ÜBERHAUPT JAVASCRIPT?

I interessante Sprachkonstrukte

I anonyme Funktionen

I Closures

I Funktionen als Variablen

I JavaScript unterstützt intrinsisch event-basierte

Programmierung

I vgl. client-seitiges AJAX

Page 39: Node.js – Stand-Up Präesentation Webmontag Ulm

10 / 25

JAVASCRIPT IN NODE.JS

I serverseitiges(!) JavaScript

I z.B. kein window Objekt

I Node.js nutzt intern Google v8

I JavaScript Engine, u.a. für Chrome Webbrowser

I Übersetzung in nativen Maschinencode

I Garbage Collection, Inline Caching, etc.

I ECMAScript 5

I z.T. CommonJS Standards wie Modules

Page 40: Node.js – Stand-Up Präesentation Webmontag Ulm

10 / 25

JAVASCRIPT IN NODE.JS

I serverseitiges(!) JavaScript

I z.B. kein window Objekt

I Node.js nutzt intern Google v8

I JavaScript Engine, u.a. für Chrome Webbrowser

I Übersetzung in nativen Maschinencode

I Garbage Collection, Inline Caching, etc.

I ECMAScript 5

I z.T. CommonJS Standards wie Modules

Page 41: Node.js – Stand-Up Präesentation Webmontag Ulm

10 / 25

JAVASCRIPT IN NODE.JS

I serverseitiges(!) JavaScript

I z.B. kein window Objekt

I Node.js nutzt intern Google v8

I JavaScript Engine, u.a. für Chrome Webbrowser

I Übersetzung in nativen Maschinencode

I Garbage Collection, Inline Caching, etc.

I ECMAScript 5

I z.T. CommonJS Standards wie Modules

Page 42: Node.js – Stand-Up Präesentation Webmontag Ulm

10 / 25

JAVASCRIPT IN NODE.JS

I serverseitiges(!) JavaScript

I z.B. kein window Objekt

I Node.js nutzt intern Google v8

I JavaScript Engine, u.a. für Chrome Webbrowser

I Übersetzung in nativen Maschinencode

I Garbage Collection, Inline Caching, etc.

I ECMAScript 5

I z.T. CommonJS Standards wie Modules

Page 43: Node.js – Stand-Up Präesentation Webmontag Ulm

10 / 25

JAVASCRIPT IN NODE.JS

I serverseitiges(!) JavaScript

I z.B. kein window Objekt

I Node.js nutzt intern Google v8

I JavaScript Engine, u.a. für Chrome Webbrowser

I Übersetzung in nativen Maschinencode

I Garbage Collection, Inline Caching, etc.

I ECMAScript 5

I z.T. CommonJS Standards wie Modules

Page 44: Node.js – Stand-Up Präesentation Webmontag Ulm

10 / 25

JAVASCRIPT IN NODE.JS

I serverseitiges(!) JavaScript

I z.B. kein window Objekt

I Node.js nutzt intern Google v8

I JavaScript Engine, u.a. für Chrome Webbrowser

I Übersetzung in nativen Maschinencode

I Garbage Collection, Inline Caching, etc.

I ECMAScript 5

I z.T. CommonJS Standards wie Modules

Page 45: Node.js – Stand-Up Präesentation Webmontag Ulm

10 / 25

JAVASCRIPT IN NODE.JS

I serverseitiges(!) JavaScript

I z.B. kein window Objekt

I Node.js nutzt intern Google v8

I JavaScript Engine, u.a. für Chrome Webbrowser

I Übersetzung in nativen Maschinencode

I Garbage Collection, Inline Caching, etc.

I ECMAScript 5

I z.T. CommonJS Standards wie Modules

Page 46: Node.js – Stand-Up Präesentation Webmontag Ulm

10 / 25

JAVASCRIPT IN NODE.JS

I serverseitiges(!) JavaScript

I z.B. kein window Objekt

I Node.js nutzt intern Google v8

I JavaScript Engine, u.a. für Chrome Webbrowser

I Übersetzung in nativen Maschinencode

I Garbage Collection, Inline Caching, etc.

I ECMAScript 5

I z.T. CommonJS Standards wie Modules

Page 47: Node.js – Stand-Up Präesentation Webmontag Ulm

11 / 25

NODE.JS API

I HTTP

I Client/Server

I HTTP Parser

I Filesystem

I Asynchrone Wrapper um POSIX Funktionen

I Read/Write Streams

I TCP, Crypto, DNS, Processes, Sys, Timers, etc.

Page 48: Node.js – Stand-Up Präesentation Webmontag Ulm

11 / 25

NODE.JS API

I HTTP

I Client/Server

I HTTP Parser

I Filesystem

I Asynchrone Wrapper um POSIX Funktionen

I Read/Write Streams

I TCP, Crypto, DNS, Processes, Sys, Timers, etc.

Page 49: Node.js – Stand-Up Präesentation Webmontag Ulm

11 / 25

NODE.JS API

I HTTP

I Client/Server

I HTTP Parser

I Filesystem

I Asynchrone Wrapper um POSIX Funktionen

I Read/Write Streams

I TCP, Crypto, DNS, Processes, Sys, Timers, etc.

Page 50: Node.js – Stand-Up Präesentation Webmontag Ulm

11 / 25

NODE.JS API

I HTTP

I Client/Server

I HTTP Parser

I Filesystem

I Asynchrone Wrapper um POSIX Funktionen

I Read/Write Streams

I TCP, Crypto, DNS, Processes, Sys, Timers, etc.

Page 51: Node.js – Stand-Up Präesentation Webmontag Ulm

11 / 25

NODE.JS API

I HTTP

I Client/Server

I HTTP Parser

I Filesystem

I Asynchrone Wrapper um POSIX Funktionen

I Read/Write Streams

I TCP, Crypto, DNS, Processes, Sys, Timers, etc.

Page 52: Node.js – Stand-Up Präesentation Webmontag Ulm

11 / 25

NODE.JS API

I HTTP

I Client/Server

I HTTP Parser

I Filesystem

I Asynchrone Wrapper um POSIX Funktionen

I Read/Write Streams

I TCP, Crypto, DNS, Processes, Sys, Timers, etc.

Page 53: Node.js – Stand-Up Präesentation Webmontag Ulm

11 / 25

NODE.JS API

I HTTP

I Client/Server

I HTTP Parser

I Filesystem

I Asynchrone Wrapper um POSIX Funktionen

I Read/Write Streams

I TCP, Crypto, DNS, Processes, Sys, Timers, etc.

Page 54: Node.js – Stand-Up Präesentation Webmontag Ulm

12 / 25

HELLO WORLD WEBSERVER IN NODE.JS

hello.js

1 var http = require(’http’);

2

3 http.createServer(function (request, response) {

4 response.writeHead(200, {’Content-Type’: ’text/plain’});

5 response.end(’Hello World\n’);

6 }).listen(8000);

Page 55: Node.js – Stand-Up Präesentation Webmontag Ulm

12 / 25

HELLO WORLD WEBSERVER IN NODE.JS

hello.js

1 var http = require(’http’);

2

3 http.createServer(function (request, response) {

4 response.writeHead(200, {’Content-Type’: ’text/plain’});

5 response.end(’Hello World\n’);

6 }).listen(8000);

$ node hello.js &

Page 56: Node.js – Stand-Up Präesentation Webmontag Ulm

12 / 25

HELLO WORLD WEBSERVER IN NODE.JS

hello.js

1 var http = require(’http’);

2

3 http.createServer(function (request, response) {

4 response.writeHead(200, {’Content-Type’: ’text/plain’});

5 response.end(’Hello World\n’);

6 }).listen(8000);

$ node hello.js &

$ curl http://localhost:8000/

Page 57: Node.js – Stand-Up Präesentation Webmontag Ulm

13 / 25

HELLO WORLD WEBSERVER MIT VERZÖGERUNG IN NODE.JS

delayedhello.js

1 var http = require(’http’);

2

3 http.createServer(function (request, response) {

4 setTimeout(function () {

5 response.writeHead(200, {’Content-Type’: ’text/plain’});

6 response.end(’Hello World\n’);

7 }, 2000);

8 }).listen(8000);

Page 58: Node.js – Stand-Up Präesentation Webmontag Ulm

14 / 25

ABFRAGE VON DATEIINFORMATIONEN

stat.js

1 var http = require(’http’), fs = require(’fs’), url = require(’url’);

2

3 http.createServer(function (request, response) {

4 fs.stat(url.parse(request.url).pathname, function(err, stats){

5 if(!err){

6 response.writeHead(200, {’Content-Type’: ’application/json’});

7 response.end(JSON.stringify(stats));

8 }else{

9 response.writeHead(500, {’Content-Type’: ’application/json’});

10 response.end(JSON.stringify(err));

11 }

12 });

13 }).listen(8001);

Page 59: Node.js – Stand-Up Präesentation Webmontag Ulm

15 / 25

ABFRAGE VON DATEIINFORMATIONEN (2)

$ curl http://localhost:8001/dev/null

{

"dev":14,

...

"atime":"2010-05-30T08:01:32.000Z",

"mtime":"2010-05-30T08:01:32.000Z",

"ctime":"2010-05-30T08:01:32.000Z"

}

$ curl http://localhost:8001/dev/nullx

{

"message":"ENOENT, No such file or directory ’/dev/nullx’",

"stack":"Error: ENOENT, No such file or directory ’/dev/nullx’\n ...

"errno":2,

"path":"/dev/nullx"

}

Page 60: Node.js – Stand-Up Präesentation Webmontag Ulm

16 / 25

EINSATZSZENARIEN

I Web

I Real Time Web

I Webservices (z.B. REST + JSON)

I C10k Szenarien

I . . .

I Netzwerkanwendungen

I Rapid Prototyping

I . . .

Page 61: Node.js – Stand-Up Präesentation Webmontag Ulm

16 / 25

EINSATZSZENARIEN

I Web

I Real Time Web

I Webservices (z.B. REST + JSON)

I C10k Szenarien

I . . .

I Netzwerkanwendungen

I Rapid Prototyping

I . . .

Page 62: Node.js – Stand-Up Präesentation Webmontag Ulm

16 / 25

EINSATZSZENARIEN

I Web

I Real Time Web

I Webservices (z.B. REST + JSON)

I C10k Szenarien

I . . .

I Netzwerkanwendungen

I Rapid Prototyping

I . . .

Page 63: Node.js – Stand-Up Präesentation Webmontag Ulm

16 / 25

EINSATZSZENARIEN

I Web

I Real Time Web

I Webservices (z.B. REST + JSON)

I C10k Szenarien

I . . .

I Netzwerkanwendungen

I Rapid Prototyping

I . . .

Page 64: Node.js – Stand-Up Präesentation Webmontag Ulm

16 / 25

EINSATZSZENARIEN

I Web

I Real Time Web

I Webservices (z.B. REST + JSON)

I C10k Szenarien

I . . .

I Netzwerkanwendungen

I Rapid Prototyping

I . . .

Page 65: Node.js – Stand-Up Präesentation Webmontag Ulm

16 / 25

EINSATZSZENARIEN

I Web

I Real Time Web

I Webservices (z.B. REST + JSON)

I C10k Szenarien

I . . .

I Netzwerkanwendungen

I Rapid Prototyping

I . . .

Page 66: Node.js – Stand-Up Präesentation Webmontag Ulm

16 / 25

EINSATZSZENARIEN

I Web

I Real Time Web

I Webservices (z.B. REST + JSON)

I C10k Szenarien

I . . .

I Netzwerkanwendungen

I Rapid Prototyping

I . . .

Page 67: Node.js – Stand-Up Präesentation Webmontag Ulm

16 / 25

EINSATZSZENARIEN

I Web

I Real Time Web

I Webservices (z.B. REST + JSON)

I C10k Szenarien

I . . .

I Netzwerkanwendungen

I Rapid Prototyping

I . . .

Page 68: Node.js – Stand-Up Präesentation Webmontag Ulm

17 / 25

STATUS

I definitiv beta

I aktuelle Version: 0.1.97 (29.05.2010)

I noch häufige API Änderungen

Page 69: Node.js – Stand-Up Präesentation Webmontag Ulm

17 / 25

STATUS

I definitiv beta

I aktuelle Version: 0.1.97 (29.05.2010)

I noch häufige API Änderungen

Page 70: Node.js – Stand-Up Präesentation Webmontag Ulm

17 / 25

STATUS

I definitiv beta

I aktuelle Version: 0.1.97 (29.05.2010)

I noch häufige API Änderungen

Page 71: Node.js – Stand-Up Präesentation Webmontag Ulm

18 / 25

LANGFRISTIGE ZIELE

I API Freeze

I Unterstützung für Nebenläufigkeit

I Web Worker/Web Worker-ähnliche API

I Kommunikation zwischen Node Prozessen

I Auslagerung von CPU-gewichtigen Aufgaben

I jedoch kein Multithreading wie bei Java(!)

Page 72: Node.js – Stand-Up Präesentation Webmontag Ulm

18 / 25

LANGFRISTIGE ZIELE

I API Freeze

I Unterstützung für Nebenläufigkeit

I Web Worker/Web Worker-ähnliche API

I Kommunikation zwischen Node Prozessen

I Auslagerung von CPU-gewichtigen Aufgaben

I jedoch kein Multithreading wie bei Java(!)

Page 73: Node.js – Stand-Up Präesentation Webmontag Ulm

19 / 25

MODULE

I aktive Community um Module

I verschiedenste Bereiche

I Datenbank-Konnektoren, Datenbanken

I (Micro-)Frameworks, Router, Template-Engines

I Library-Bindings für XML, gd, . . .

I Debugging, Testing

I Paketverwaltungen

I . . .

Page 74: Node.js – Stand-Up Präesentation Webmontag Ulm

19 / 25

MODULE

I aktive Community um Module

I verschiedenste Bereiche

I Datenbank-Konnektoren, Datenbanken

I (Micro-)Frameworks, Router, Template-Engines

I Library-Bindings für XML, gd, . . .

I Debugging, Testing

I Paketverwaltungen

I . . .

Page 75: Node.js – Stand-Up Präesentation Webmontag Ulm

20 / 25

LINKS

I http://nodejs.org/

I http://wiki.github.com/ry/node/modules

I http://howtonode.org/

I #node.js auf irc.freenode.net

I http://groups.google.com/group/nodejs

Page 76: Node.js – Stand-Up Präesentation Webmontag Ulm

21 / 25

FRAGEN

Vielen Dank für die Aufmerksamkeit.

Noch Fragen?

Page 77: Node.js – Stand-Up Präesentation Webmontag Ulm

22 / 25

KONTAKT

I www.benjamin-erb.de

I twitter.com/b_erb

I www.ioexception.de

Page 78: Node.js – Stand-Up Präesentation Webmontag Ulm

23 / 25

BEISPIEL: HTTP CHAT VON FELIX GEISENDÖRFER

Quelle: http://blog.debuggable.com/posts/javascript-meetup-hamburg-slides:4b8f9986-4e64-4755-b420-074dcbdd56cb

1 var

2 http = require(’http’),

3 messages = [];

4 http.createServer(function(req, res) {

5 res.writeHeader(200, {’Content-Type’ : ’text/plain’});

6 if (req.url == ’/’) {

7 res.write(messages.join("\n"));

8 } else if (req.url !== ’/favicon.ico’) {

9 messages.push(decodeURIComponent(req.url.substr(1)));

10 res.write(’ok!’);

11 }

12 res.close();

13 }).listen(4000);

Page 79: Node.js – Stand-Up Präesentation Webmontag Ulm

24 / 25

BEISPIEL: HTTP PROXY VON PETERIS KRUMINS

Quelle: http://www.catonmat.net/http-proxy-in-nodejs

1 var http = require(’http’);

2

3 http.createServer(function(request, response) {

4 var proxy = http.createClient(80, request.headers[’host’])

5 var proxy_request = proxy.request(request.method, request.url, request.headers);

6 proxy_request.addListener(’response’, function (proxy_response) {

7 proxy_response.addListener(’data’, function(chunk) {

8 response.write(chunk);

9 });

10 proxy_response.addListener(’end’, function() {

11 response.end();

12 });

13 response.writeHead(proxy_response.statusCode, proxy_response.headers);

14 });

15 request.addListener(’data’, function(chunk) {

16 proxy_request.write(chunk);

17 });

18 request.addListener(’end’, function() {

19 proxy_request.end();

20 });

21 }).listen(8080);

Page 80: Node.js – Stand-Up Präesentation Webmontag Ulm

25 / 25

BEISPIEL: TCP ECHO SERVER

Quelle: http://nodejs.org

1 var tcp = require(’tcp’);

2 var server = tcp.createServer(function (socket) {

3 socket.setEncoding("utf8");

4 socket.addListener("connect", function () {

5 socket.write("hello\r\n");

6 });

7 socket.addListener("data", function (data) {

8 socket.write(data);

9 });

10 socket.addListener("end", function () {

11 socket.write("goodbye\r\n");

12 socket.end();

13 });

14 });

15 server.listen(7000, "localhost");