Node jsworkshop

Preview:

DESCRIPTION

Workshop auf den JavaScript-Days 2012 in Berlin.

Citation preview

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

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

HTTP://NODEJS.ORG/API/

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

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 Springersebastian.springer@mayflower.de

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

Recommended