Friday, September 28, 12
WER BIN ICH?
• Sebastian Springer
• https://github.com/sspringer82
•@basti_springer
• Teamlead @ Mayflower
Friday, September 28, 12
WER SEID IHR?
Friday, September 28, 12
LET’S GO
Friday, September 28, 12
THEMEN• Installation
• Kernkomponenten
• Beispiel
•Module
• Eigener Code
• Asynchronität
•NPM
•Dateisystem
•Datenbanken
• Promises
• Child Processes
•Websockets
•Debugger
• Testing
Friday, September 28, 12
INSTALLATION
Friday, September 28, 12
NODE-V0.8.9
v0.8.11v0.8.10
Friday, September 28, 12
PAKETE
•Unixhttp://nodejs.org/dist/v0.8.9/node-v0.8.9-linux-x64.tar.gz
•Machttp://nodejs.org/dist/v0.8.9/node-v0.8.9.pkg
•Windowshttp://nodejs.org/dist/v0.8.9/x64/node-v0.8.9-x64.msi
Friday, September 28, 12
HTTP://NODEJS.ORG/DOWNLOAD/
Friday, September 28, 12
SOURCE
Friday, September 28, 12
HAT ES GEKLAPPT?
Friday, September 28, 12
DIE KERNKOMPONENTEN
Friday, September 28, 12
V8
• Schneller Zugriff auf Eigenschaften
•Dynamische Erstellung von Maschinencode
• Garbage Collection
Friday, September 28, 12
V8 - FAST PROPERTY ACCESS
Friday, September 28, 12
V8 - FAST PROPERTY ACCESS
Friday, September 28, 12
V8 - FAST PROPERTY ACCESS
Friday, September 28, 12
MASCHINENCODE
Friday, September 28, 12
V8 - GARBAGE COLLECTION
• Programmausführung wird angehalten
• Es wird nur ein Teil des Object Heaps geprüft
• V8 kennt alle Objekte und Pointer im Speicher
Friday, September 28, 12
LIBEV
• Full-featured and high-performance event loop
• libevent als Basis
• Alles, außer der eigene Code ist parallel und asynchron
Friday, September 28, 12
LIBEIO
• Eventbasierte Bibliothek für asynchrone I/O Operationen
• Ergänzung zu libev
• Features: Öffnen, Lesen, Schreiben, Löschen, etc.
•Modul: fs
Friday, September 28, 12
C-ARES
• asynchrone DNS Auflösung
•Modul: dns
Friday, September 28, 12
EVCOM
• Basiert auf libev
• Eventbasierte Library für Stream Sockets
•Modul: net
Friday, September 28, 12
EIN KLEINES BEISPIEL
Friday, September 28, 12
INTERAKTIV
Friday, September 28, 12
WEBSERVER
Friday, September 28, 12
WEBSERVER
Friday, September 28, 12
WEBSERVER
Friday, September 28, 12
MODULE
Friday, September 28, 12
VERFÜGBARE MODULE
• Stream
• Events
• File System
•Net
• HTTP
• Child Processes
•OS
•Debugger
• Cluster
• Util
• Buffer
• UDP
Friday, September 28, 12
STABILITÄTSINDEX
• 0 - Deprecated
• 1 - Experimental
• 2 - Unstable
• 3 - Stable
• 4 - API Frozen
• 5 - Locked
Friday, September 28, 12
STABILITÄTSINDEX
Friday, September 28, 12
MODULE VERWENDEN
Friday, September 28, 12
EIGENE KLASSEN DEFINIEREN
Friday, September 28, 12
...IM BROWSER
Friday, September 28, 12
...IN NODE
Human.js
Friday, September 28, 12
...IN NODE
server.js
Friday, September 28, 12
ASYNCHRONE PROGRAMMIERUNG
Friday, September 28, 12
DATEI LESENnode.js Betriebssystem
Leseoperation
Friday, September 28, 12
DATEI LESEN
Friday, September 28, 12
DATEI LESEN
Friday, September 28, 12
DATEI LESEN
Friday, September 28, 12
Friday, September 28, 12
NPM
•Node Package Manager
• Seit node 0.6.3 Bundled
• Repo @ https://npmjs.org/
Friday, September 28, 12
KOMMANDOS
• npm search <package>
• npm install <package>
• npm list
• npm update
• npm remove
Friday, September 28, 12
NPM SEARCH
Friday, September 28, 12
NPM INSTALL
Friday, September 28, 12
NPM LIST
Friday, September 28, 12
NPM UPDATE
Friday, September 28, 12
NPM REMOVE
Friday, September 28, 12
EIGENE NPM PAKETE
Friday, September 28, 12
EIGENE NPM PAKETE
• npm adduser
• Username, Passwort, E-Mail
• npm publish <folder>|<tarball>
Friday, September 28, 12
HTTPS://GITHUB.COM/JOYENT/NODE/WIKI/
Friday, September 28, 12
DATEISYSTEM
Friday, September 28, 12
DATEISYSTEM-FUNKTIONEN
• exists
• readFile
• writeFile
• appendFile
• watchFile
• rename
• unlink
• chmod
• chown
• ...
Friday, September 28, 12
FILE EXISTS
Friday, September 28, 12
FILE EXISTS
Friday, September 28, 12
FILE EXISTS
Friday, September 28, 12
APPEND FILE
Friday, September 28, 12
APPEND FILE
Friday, September 28, 12
APPEND FILE
Friday, September 28, 12
WATCH FILE
Friday, September 28, 12
WATCH FILE
Friday, September 28, 12
WATCH FILE
Friday, September 28, 12
WATCH FILE
Friday, September 28, 12
FRAGEN?
Friday, September 28, 12
DATENBANKEN
Friday, September 28, 12
Friday, September 28, 12
MySQL
Friday, September 28, 12
MySQL
CouchDB
Friday, September 28, 12
MS SQL Server
MySQL
CouchDB
Friday, September 28, 12
MS SQL Server
MySQL
SQLite
CouchDB
Friday, September 28, 12
MS SQL Server
MySQL
SQLiteRedis
CouchDB
Friday, September 28, 12
MS SQL Server
PostgreSQL
MySQL
SQLiteRedis
CouchDB
Friday, September 28, 12
MS SQL Server
PostgreSQL
MySQL
SQLite
Hive
RedisCouchDB
Friday, September 28, 12
MS SQL Server
PostgreSQL
MySQL
SQLite
Mongo
Hive
RedisCouchDB
Friday, September 28, 12
MS SQL Server
PostgreSQL
MySQL
SQLite
OracleMongo
Hive
RedisCouchDB
Friday, September 28, 12
MYSQL
• npm install mysql
• Implementierung des mysql Protokolls
Friday, September 28, 12
MYSQL
Friday, September 28, 12
TEST-DATENBANK
Friday, September 28, 12
MYSQL
Friday, September 28, 12
MYSQL
Friday, September 28, 12
PROMISES
Friday, September 28, 12
PROMISES
• Ergebnis eines asynchronen Funktionsaufrufs
• Rückgabewert oder Exception
• Promise statt Blocking
• CommonJS Proposal
• bis 0.2 Bestandteil von Node
Friday, September 28, 12
PYRAMID OF DOOM
Friday, September 28, 12
PROMISES
Friday, September 28, 12
PROMISE-LIBRARIES
• https://github.com/kriskowal/q
• https://github.com/kriszyp/promised-io
• https://github.com/kriszyp/node-promise
• ...
Friday, September 28, 12
OHNE PROMISES
Friday, September 28, 12
OHNE PROMISES
Friday, September 28, 12
PROMISES
Friday, September 28, 12
PROMISES
Friday, September 28, 12
PROMISES
Friday, September 28, 12
PROMISES
Friday, September 28, 12
CHILD PROCESSES
Friday, September 28, 12
CHILD PROCESSES
• spawn - Kommandoausführung
• exec - Kommandoausführung in Puffer
• execFile - Dateiausführung in Puffer
• fork - Node Prozess
Friday, September 28, 12
ETWAS RECHENINTENSIVES
Friday, September 28, 12
ETWAS BLOCKIERENDESpotenziell
Friday, September 28, 12
ETWAS BLOCKIERENDES
Friday, September 28, 12
ETWAS BLOCKIERENDES
Friday, September 28, 12
DIE LÖSUNG: WIR FORKEN
Friday, September 28, 12
CHILD PROCESSES
Friday, September 28, 12
CHILD PROCESSES
Friday, September 28, 12
CHILD PROCESSES
Friday, September 28, 12
WEBSOCKETS
Friday, September 28, 12
WEBSOCKETS
• Protokoll auf TCP-Basis
• Bidirektionale Client-Server-Kommunikation
•Wird im Rahmen von HTML5 entwickelt
• Unterstützung durch Libraries
Friday, September 28, 12
Friday, September 28, 12
SOCKET.IO - SERVER
Friday, September 28, 12
SOCKET.IO - SERVER
Friday, September 28, 12
SOCKET.IO - CLIENT
Friday, September 28, 12
SOCKET.IO - CLIENT
Friday, September 28, 12
SOCKET.IO - CLIENT
Friday, September 28, 12
SOCKET.IO - SERVER
Friday, September 28, 12
DEBUGGER
Friday, September 28, 12
DEBUGGER
Friday, September 28, 12
DEBUGGER
Friday, September 28, 12
DEBUGGER
Friday, September 28, 12
DEBUGGER - STEP
• next - n
• cont - c
• step - s
• out - o
Friday, September 28, 12
DEBUGGER - WATCH
• watch(expression)
• unwatch(expression)
• watchers
Friday, September 28, 12
DEBUGGER - WATCH
Friday, September 28, 12
DEBUGGER - REPL
Friday, September 28, 12
TESTING
Friday, September 28, 12
TEST FRAMEWORKS
• node-unit
• node assertion testing
• jasmine-node
Friday, September 28, 12
JASMINE-NODE
Friday, September 28, 12
JASMINE-NODE
Friday, September 28, 12
JASMINE-NODE
src/Calculator.js
Friday, September 28, 12
JASMINE-NODE
spec/Calculator.spec.js
Friday, September 28, 12
JASMINE-NODE
Friday, September 28, 12
JASMINE-NODE
Friday, September 28, 12
FRAGEN?
Friday, September 28, 12
KONTAKT
Sebastian [email protected]
Mayflower GmbHMannhardtstr. 680538 MünchenDeutschland
@basti_springer
https://github.com/sspringer82
Friday, September 28, 12
SOCKETS
Friday, September 28, 12
SOCKETS
• Kommunikation über Netzwerk-/Datei-Sockets
• Read-, Write- und Read-Write-Sockets
• ‘net’-Modul
Friday, September 28, 12
SOCKETS
Socket-ServerWrite-Socket-
ClientRead-Socket-
ClientDaten Daten
Friday, September 28, 12
SOCKETS - SERVER
Friday, September 28, 12
SOCKETS - READ
Friday, September 28, 12
SOCKETS - WRITE
Friday, September 28, 12
SOCKETS - SERVER
Friday, September 28, 12
SOCKETS - SERVER
Friday, September 28, 12
SOCKETS - SERVER
Friday, September 28, 12
SOCKETS - SERVER
Friday, September 28, 12