node.js – stand-up präesentation webmontag ulm
TRANSCRIPT
![Page 1: Node.js – Stand-Up Präesentation Webmontag Ulm](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/50.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/51.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/52.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/53.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/54.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/55.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/56.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/57.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/58.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/59.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/60.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/61.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/62.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/63.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/64.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/65.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/66.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/67.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/68.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/69.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/70.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/71.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/72.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/73.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/74.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/75.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/76.jpg)
21 / 25
FRAGEN
Vielen Dank für die Aufmerksamkeit.
Noch Fragen?
![Page 77: Node.js – Stand-Up Präesentation Webmontag Ulm](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/77.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/78.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/79.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022042615/55a9a7121a28abab518b48ba/html5/thumbnails/80.jpg)
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");