Download pdf - Node jsworkshop

Transcript
Page 1: Node jsworkshop

Friday, September 28, 12

Page 2: Node jsworkshop

WER BIN ICH?

• Sebastian Springer

• https://github.com/sspringer82

•@basti_springer

• Teamlead @ Mayflower

Friday, September 28, 12

Page 3: Node jsworkshop

WER SEID IHR?

Friday, September 28, 12

Page 4: Node jsworkshop

LET’S GO

Friday, September 28, 12

Page 5: Node jsworkshop

THEMEN• Installation

• Kernkomponenten

• Beispiel

•Module

• Eigener Code

• Asynchronität

•NPM

•Dateisystem

•Datenbanken

• Promises

• Child Processes

•Websockets

•Debugger

• Testing

Friday, September 28, 12

Page 6: Node jsworkshop

INSTALLATION

Friday, September 28, 12

Page 7: Node jsworkshop

NODE-V0.8.9

v0.8.11v0.8.10

Friday, September 28, 12

Page 8: Node jsworkshop

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

Page 10: Node jsworkshop

SOURCE

Friday, September 28, 12

Page 11: Node jsworkshop

HAT ES GEKLAPPT?

Friday, September 28, 12

Page 12: Node jsworkshop

DIE KERNKOMPONENTEN

Friday, September 28, 12

Page 13: Node jsworkshop

V8

• Schneller Zugriff auf Eigenschaften

•Dynamische Erstellung von Maschinencode

• Garbage Collection

Friday, September 28, 12

Page 14: Node jsworkshop

V8 - FAST PROPERTY ACCESS

Friday, September 28, 12

Page 15: Node jsworkshop

V8 - FAST PROPERTY ACCESS

Friday, September 28, 12

Page 16: Node jsworkshop

V8 - FAST PROPERTY ACCESS

Friday, September 28, 12

Page 17: Node jsworkshop

MASCHINENCODE

Friday, September 28, 12

Page 18: Node jsworkshop

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

Page 19: Node jsworkshop

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

Page 20: Node jsworkshop

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

Page 21: Node jsworkshop

C-ARES

• asynchrone DNS Auflösung

•Modul: dns

Friday, September 28, 12

Page 22: Node jsworkshop

EVCOM

• Basiert auf libev

• Eventbasierte Library für Stream Sockets

•Modul: net

Friday, September 28, 12

Page 23: Node jsworkshop

EIN KLEINES BEISPIEL

Friday, September 28, 12

Page 24: Node jsworkshop

INTERAKTIV

Friday, September 28, 12

Page 25: Node jsworkshop

WEBSERVER

Friday, September 28, 12

Page 26: Node jsworkshop

WEBSERVER

Friday, September 28, 12

Page 27: Node jsworkshop

WEBSERVER

Friday, September 28, 12

Page 28: Node jsworkshop

MODULE

Friday, September 28, 12

Page 29: Node jsworkshop

VERFÜGBARE MODULE

• Stream

• Events

• File System

•Net

• HTTP

• Child Processes

•OS

•Debugger

• Cluster

• Util

• Buffer

• UDP

Friday, September 28, 12

Page 30: Node jsworkshop

HTTP://NODEJS.ORG/API/

Friday, September 28, 12

Page 31: Node jsworkshop

STABILITÄTSINDEX

• 0 - Deprecated

• 1 - Experimental

• 2 - Unstable

• 3 - Stable

• 4 - API Frozen

• 5 - Locked

Friday, September 28, 12

Page 32: Node jsworkshop

STABILITÄTSINDEX

Friday, September 28, 12

Page 33: Node jsworkshop

MODULE VERWENDEN

Friday, September 28, 12

Page 34: Node jsworkshop

EIGENE KLASSEN DEFINIEREN

Friday, September 28, 12

Page 35: Node jsworkshop

...IM BROWSER

Friday, September 28, 12

Page 36: Node jsworkshop

...IN NODE

Human.js

Friday, September 28, 12

Page 37: Node jsworkshop

...IN NODE

server.js

Friday, September 28, 12

Page 38: Node jsworkshop

ASYNCHRONE PROGRAMMIERUNG

Friday, September 28, 12

Page 39: Node jsworkshop

DATEI LESENnode.js Betriebssystem

Leseoperation

Friday, September 28, 12

Page 40: Node jsworkshop

DATEI LESEN

Friday, September 28, 12

Page 41: Node jsworkshop

DATEI LESEN

Friday, September 28, 12

Page 42: Node jsworkshop

DATEI LESEN

Friday, September 28, 12

Page 43: Node jsworkshop

Friday, September 28, 12

Page 44: Node jsworkshop

NPM

•Node Package Manager

• Seit node 0.6.3 Bundled

• Repo @ https://npmjs.org/

Friday, September 28, 12

Page 45: Node jsworkshop

KOMMANDOS

• npm search <package>

• npm install <package>

• npm list

• npm update

• npm remove

Friday, September 28, 12

Page 46: Node jsworkshop

NPM SEARCH

Friday, September 28, 12

Page 47: Node jsworkshop

NPM INSTALL

Friday, September 28, 12

Page 48: Node jsworkshop

NPM LIST

Friday, September 28, 12

Page 49: Node jsworkshop

NPM UPDATE

Friday, September 28, 12

Page 50: Node jsworkshop

NPM REMOVE

Friday, September 28, 12

Page 51: Node jsworkshop

EIGENE NPM PAKETE

Friday, September 28, 12

Page 52: Node jsworkshop

EIGENE NPM PAKETE

• npm adduser

• Username, Passwort, E-Mail

• npm publish <folder>|<tarball>

Friday, September 28, 12

Page 54: Node jsworkshop

DATEISYSTEM

Friday, September 28, 12

Page 55: Node jsworkshop

DATEISYSTEM-FUNKTIONEN

• exists

• readFile

• writeFile

• appendFile

• watchFile

• rename

• unlink

• chmod

• chown

• ...

Friday, September 28, 12

Page 56: Node jsworkshop

FILE EXISTS

Friday, September 28, 12

Page 57: Node jsworkshop

FILE EXISTS

Friday, September 28, 12

Page 58: Node jsworkshop

FILE EXISTS

Friday, September 28, 12

Page 59: Node jsworkshop

APPEND FILE

Friday, September 28, 12

Page 60: Node jsworkshop

APPEND FILE

Friday, September 28, 12

Page 61: Node jsworkshop

APPEND FILE

Friday, September 28, 12

Page 62: Node jsworkshop

WATCH FILE

Friday, September 28, 12

Page 63: Node jsworkshop

WATCH FILE

Friday, September 28, 12

Page 64: Node jsworkshop

WATCH FILE

Friday, September 28, 12

Page 65: Node jsworkshop

WATCH FILE

Friday, September 28, 12

Page 66: Node jsworkshop

FRAGEN?

Friday, September 28, 12

Page 67: Node jsworkshop

DATENBANKEN

Friday, September 28, 12

Page 68: Node jsworkshop

Friday, September 28, 12

Page 69: Node jsworkshop

MySQL

Friday, September 28, 12

Page 70: Node jsworkshop

MySQL

CouchDB

Friday, September 28, 12

Page 71: Node jsworkshop

MS SQL Server

MySQL

CouchDB

Friday, September 28, 12

Page 72: Node jsworkshop

MS SQL Server

MySQL

SQLite

CouchDB

Friday, September 28, 12

Page 73: Node jsworkshop

MS SQL Server

MySQL

SQLiteRedis

CouchDB

Friday, September 28, 12

Page 74: Node jsworkshop

MS SQL Server

PostgreSQL

MySQL

SQLiteRedis

CouchDB

Friday, September 28, 12

Page 75: Node jsworkshop

MS SQL Server

PostgreSQL

MySQL

SQLite

Hive

RedisCouchDB

Friday, September 28, 12

Page 76: Node jsworkshop

MS SQL Server

PostgreSQL

MySQL

SQLite

Mongo

Hive

RedisCouchDB

Friday, September 28, 12

Page 77: Node jsworkshop

MS SQL Server

PostgreSQL

MySQL

SQLite

OracleMongo

Hive

RedisCouchDB

Friday, September 28, 12

Page 78: Node jsworkshop

MYSQL

• npm install mysql

• Implementierung des mysql Protokolls

Friday, September 28, 12

Page 79: Node jsworkshop

MYSQL

Friday, September 28, 12

Page 80: Node jsworkshop

TEST-DATENBANK

Friday, September 28, 12

Page 81: Node jsworkshop

MYSQL

Friday, September 28, 12

Page 82: Node jsworkshop

MYSQL

Friday, September 28, 12

Page 83: Node jsworkshop

PROMISES

Friday, September 28, 12

Page 84: Node jsworkshop

PROMISES

• Ergebnis eines asynchronen Funktionsaufrufs

• Rückgabewert oder Exception

• Promise statt Blocking

• CommonJS Proposal

• bis 0.2 Bestandteil von Node

Friday, September 28, 12

Page 85: Node jsworkshop

PYRAMID OF DOOM

Friday, September 28, 12

Page 86: Node jsworkshop

PROMISES

Friday, September 28, 12

Page 87: Node jsworkshop

PROMISE-LIBRARIES

• https://github.com/kriskowal/q

• https://github.com/kriszyp/promised-io

• https://github.com/kriszyp/node-promise

• ...

Friday, September 28, 12

Page 88: Node jsworkshop

OHNE PROMISES

Friday, September 28, 12

Page 89: Node jsworkshop

OHNE PROMISES

Friday, September 28, 12

Page 90: Node jsworkshop

PROMISES

Friday, September 28, 12

Page 91: Node jsworkshop

PROMISES

Friday, September 28, 12

Page 92: Node jsworkshop

PROMISES

Friday, September 28, 12

Page 93: Node jsworkshop

PROMISES

Friday, September 28, 12

Page 94: Node jsworkshop

CHILD PROCESSES

Friday, September 28, 12

Page 95: Node jsworkshop

CHILD PROCESSES

• spawn - Kommandoausführung

• exec - Kommandoausführung in Puffer

• execFile - Dateiausführung in Puffer

• fork - Node Prozess

Friday, September 28, 12

Page 96: Node jsworkshop

ETWAS RECHENINTENSIVES

Friday, September 28, 12

Page 97: Node jsworkshop

ETWAS BLOCKIERENDESpotenziell

Friday, September 28, 12

Page 98: Node jsworkshop

ETWAS BLOCKIERENDES

Friday, September 28, 12

Page 99: Node jsworkshop

ETWAS BLOCKIERENDES

Friday, September 28, 12

Page 100: Node jsworkshop

DIE LÖSUNG: WIR FORKEN

Friday, September 28, 12

Page 101: Node jsworkshop

CHILD PROCESSES

Friday, September 28, 12

Page 102: Node jsworkshop

CHILD PROCESSES

Friday, September 28, 12

Page 103: Node jsworkshop

CHILD PROCESSES

Friday, September 28, 12

Page 104: Node jsworkshop

WEBSOCKETS

Friday, September 28, 12

Page 105: Node jsworkshop

WEBSOCKETS

• Protokoll auf TCP-Basis

• Bidirektionale Client-Server-Kommunikation

•Wird im Rahmen von HTML5 entwickelt

• Unterstützung durch Libraries

Friday, September 28, 12

Page 106: Node jsworkshop

Friday, September 28, 12

Page 107: Node jsworkshop

SOCKET.IO - SERVER

Friday, September 28, 12

Page 108: Node jsworkshop

SOCKET.IO - SERVER

Friday, September 28, 12

Page 109: Node jsworkshop

SOCKET.IO - CLIENT

Friday, September 28, 12

Page 110: Node jsworkshop

SOCKET.IO - CLIENT

Friday, September 28, 12

Page 111: Node jsworkshop

SOCKET.IO - CLIENT

Friday, September 28, 12

Page 112: Node jsworkshop

SOCKET.IO - SERVER

Friday, September 28, 12

Page 113: Node jsworkshop

DEBUGGER

Friday, September 28, 12

Page 114: Node jsworkshop

DEBUGGER

Friday, September 28, 12

Page 115: Node jsworkshop

DEBUGGER

Friday, September 28, 12

Page 116: Node jsworkshop

DEBUGGER

Friday, September 28, 12

Page 117: Node jsworkshop

DEBUGGER - STEP

• next - n

• cont - c

• step - s

• out - o

Friday, September 28, 12

Page 118: Node jsworkshop

DEBUGGER - WATCH

• watch(expression)

• unwatch(expression)

• watchers

Friday, September 28, 12

Page 119: Node jsworkshop

DEBUGGER - WATCH

Friday, September 28, 12

Page 120: Node jsworkshop

DEBUGGER - REPL

Friday, September 28, 12

Page 121: Node jsworkshop

TESTING

Friday, September 28, 12

Page 122: Node jsworkshop

TEST FRAMEWORKS

• node-unit

• node assertion testing

• jasmine-node

Friday, September 28, 12

Page 123: Node jsworkshop

JASMINE-NODE

Friday, September 28, 12

Page 124: Node jsworkshop

JASMINE-NODE

Friday, September 28, 12

Page 125: Node jsworkshop

JASMINE-NODE

src/Calculator.js

Friday, September 28, 12

Page 126: Node jsworkshop

JASMINE-NODE

spec/Calculator.spec.js

Friday, September 28, 12

Page 127: Node jsworkshop

JASMINE-NODE

Friday, September 28, 12

Page 128: Node jsworkshop

JASMINE-NODE

Friday, September 28, 12

Page 129: Node jsworkshop

FRAGEN?

Friday, September 28, 12

Page 130: Node jsworkshop

KONTAKT

Sebastian [email protected]

Mayflower GmbHMannhardtstr. 680538 MünchenDeutschland

@basti_springer

https://github.com/sspringer82

Friday, September 28, 12

Page 131: Node jsworkshop

SOCKETS

Friday, September 28, 12

Page 132: Node jsworkshop

SOCKETS

• Kommunikation über Netzwerk-/Datei-Sockets

• Read-, Write- und Read-Write-Sockets

• ‘net’-Modul

Friday, September 28, 12

Page 133: Node jsworkshop

SOCKETS

Socket-ServerWrite-Socket-

ClientRead-Socket-

ClientDaten Daten

Friday, September 28, 12

Page 134: Node jsworkshop

SOCKETS - SERVER

Friday, September 28, 12

Page 135: Node jsworkshop

SOCKETS - READ

Friday, September 28, 12

Page 136: Node jsworkshop

SOCKETS - WRITE

Friday, September 28, 12

Page 137: Node jsworkshop

SOCKETS - SERVER

Friday, September 28, 12

Page 138: Node jsworkshop

SOCKETS - SERVER

Friday, September 28, 12

Page 139: Node jsworkshop

SOCKETS - SERVER

Friday, September 28, 12

Page 140: Node jsworkshop

SOCKETS - SERVER

Friday, September 28, 12


Recommended