Introduzione a node: cenni storici ecc

Preview:

Citation preview

NODE.JSUna breve introduzione

Wednesday, May 22, 13

@unlucio

CIAO! :)

Wednesday, May 22, 13

INDICE DEL CORSOCORE

• Introduzione su node

• Installazione

• Struttura base di un progetto

• npm

• Hands on: Esempi di funzionalita’ di base

• Hands on: Esempi di piccole applicazioni

Wednesday, May 22, 13

INDICE DEL CORSOEXPRESS

• Installazione

• Generazione di un progetto

• Routes

• Views

•Middle wares

• Sessions and Error Handling

Wednesday, May 22, 13

Benvenuti

Wednesday, May 22, 13

INDEX

• Cos’e’ Node.js

• Come e perche’ nasce

• Async e Next Tick

• Esempi di architettura in cui usarlo

Wednesday, May 22, 13

Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and

efficient, perfect for data-intensive real-time applications that run across distributed devices.

Current Version: v0.8.21

Wednesday, May 22, 13

RYAN DAHLnode.js creator

anno: 2009Wednesday, May 22, 13

RYAN DAHL

Studente in Matematica

Si trasferisce in Sud America

Incontra un programmatore php

Inizia a sviluppare siti ed “applicazioni” web

Incontra ROR

Si accorge che il Web e’ lento!

Wednesday, May 22, 13

Il Web e’ lento!

Per via di Java ;)

Wednesday, May 22, 13

Il Web e’ lento!

Per via di Java ;)

Alcuni cominciano a lavorare per velocizzare ROR

Wednesday, May 22, 13

Il Web e’ lento!

Per via di Java ;)

Alcuni cominciano a lavorare per velocizzare ROR

Ma il problema risiede nell’intero stack

Wednesday, May 22, 13

Il Web e’ lento!

Per via di Java ;)

Alcuni cominciano a lavorare per velocizzare ROR

Ma il problema risiede nell’intero stack

Il lavoro di Zed Shaw da vita a Mongel

Wednesday, May 22, 13

Mongrel

Per via di Java ;)

Wednesday, May 22, 13

Mongrel

Per via di Java ;)

E’ sia una libreria http, sia un webserver!

Wednesday, May 22, 13

Mongrel

Per via di Java ;)

E’ sia una libreria http, sia un webserver!

Il web server non e’ piu’ solo “una directory “

Wednesday, May 22, 13

Mongrel

Per via di Java ;)

E’ sia una libreria http, sia un webserver!

Il web server non e’ piu’ solo “una directory “

Puo’ racchiudere direttamente la logica

Wednesday, May 22, 13

Il Web Server

Per via di Java ;)

Wednesday, May 22, 13

Il Web Server

Per via di Java ;)

Distillato, e’ fatto per gestire richieste e risposte

Wednesday, May 22, 13

Il Web Server

Per via di Java ;)

Distillato, e’ fatto per gestire richieste e risposte

Servire files e’ una parte ma non e’ obbligatoria

Wednesday, May 22, 13

THE FILE UPLOAD PROBLEM

Wednesday, May 22, 13

THE FILE UPLOAD PROBLEMCaricare files via http non era poi cosi’ comune

Wednesday, May 22, 13

THE FILE UPLOAD PROBLEMCaricare files via http non era poi cosi’ comune

Con la nascita di Ajax si cominciavano a caricare VIDEO!

Wednesday, May 22, 13

THE FILE UPLOAD PROBLEMCaricare files via http non era poi cosi’ comune

Con la nascita di Ajax si cominciavano a caricare VIDEO!

Ed ecco un nuovo problema da affrontare:

Wednesday, May 22, 13

LA PROGRESS BAR

Wednesday, May 22, 13

LA PROGRESS BARIl DOM non dava alcuna informazione sul file

Wednesday, May 22, 13

LA PROGRESS BARIl DOM non dava alcuna informazione sul file

Il trucco era controllare lo stato del file lato server in batch.

Wednesday, May 22, 13

LA PROGRESS BARIl DOM non dava alcuna informazione sul file

Il trucco era controllare lo stato del file lato server in batch.

Ma l’http 1.1 ci da connessioni che possono restare aperte!

Wednesday, May 22, 13

LA PROGRESS BARIl DOM non dava alcuna informazione sul file

Il trucco era controllare lo stato del file lato server in batch.

Ma l’http 1.1 ci da connessioni che possono restare aperte!

Nasce un interessante plugin per Mongrel

Wednesday, May 22, 13

IL LONG POLLING

Wednesday, May 22, 13

IL LONG POLLINGNon piu’ continue richieste Ajax temporizzate

Wednesday, May 22, 13

IL LONG POLLINGNon piu’ continue richieste Ajax temporizzate

Il Web Server non risponde e chiude subito la connessione

Wednesday, May 22, 13

IL LONG POLLINGNon piu’ continue richieste Ajax temporizzate

Il Web Server non risponde e chiude subito la connessione

La connessione resta aperta finche’ la si puo’ usare

Wednesday, May 22, 13

IL LONG POLLINGNon piu’ continue richieste Ajax temporizzate

Il Web Server non risponde e chiude subito la connessione

La connessione resta aperta finche’ la si puo’ usare

Il Server continua a spedire lo stato del file fino al termine

Wednesday, May 22, 13

IL WEB SERVER E’ APPENA DIVENTATO MOLTO PIU’

INTELLIGENTE! :)

Wednesday, May 22, 13

MA...

Wednesday, May 22, 13

IL WEB E’ ANCORA LENTO!

Wednesday, May 22, 13

IL WEB E’ ANCORA LENTO!Ruby, Python, ecc sono troppo lenti by design

Wednesday, May 22, 13

IL WEB E’ ANCORA LENTO!Ruby, Python, ecc sono troppo lenti by design

Gli interpreti sono singoli thread bloccanti

Wednesday, May 22, 13

IL WEB E’ ANCORA LENTO!Ruby, Python, ecc sono troppo lenti by design

Gli interpreti sono singoli thread bloccanti

Il C e’ veloce ma uno sconosciuto per troppi webdev

Wednesday, May 22, 13

SI SPERIMENTA CON:

Wednesday, May 22, 13

SI SPERIMENTA CON:Ruby

Wednesday, May 22, 13

SI SPERIMENTA CON:Ruby

Python

Wednesday, May 22, 13

SI SPERIMENTA CON:Ruby

Python

Askel

Wednesday, May 22, 13

L’OBIETTIVO:

Wednesday, May 22, 13

L’OBIETTIVO:Costruire un sistema libero da lock!

Wednesday, May 22, 13

LA RISPOSTA:

Wednesday, May 22, 13

LA RISPOSTA:Tutto in un solo thread

Wednesday, May 22, 13

LA RISPOSTA:Tutto in un solo thread

Migliora?

Wednesday, May 22, 13

LA RISPOSTA:Tutto in un solo thread

Migliora?

SI! Si possono evitare tutti i problemi derivanti dai lock!

Wednesday, May 22, 13

LA RISPOSTA:Tutto in un solo thread

Migliora?

SI! Si possono evitare tutti i problemi derivanti dai lock!

C’e’ un linguaggio che tutto cio’ lo fa di natura:

Wednesday, May 22, 13

JAVASCRIPT

Wednesday, May 22, 13

JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piede

Wednesday, May 22, 13

JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piede

Tutti i maggiori browser stavano gia’ “combattendo su js”

Wednesday, May 22, 13

JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piede

Tutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciato V8

Wednesday, May 22, 13

JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piede

Tutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciato V8

Ha le caratteristiche adatte:

Wednesday, May 22, 13

JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piede

Tutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciato V8

Ha le caratteristiche adatte:Closures

Wednesday, May 22, 13

JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piede

Tutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciato V8

Ha le caratteristiche adatte:Closures

Funzioni anonime

Wednesday, May 22, 13

JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piede

Tutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciato V8

Ha le caratteristiche adatte:Closures

Funzioni anonime

Non e’ usato al di fuori dei browser

Wednesday, May 22, 13

JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piede

Tutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciato V8

Ha le caratteristiche adatte:Closures

Funzioni anonime

Non e’ usato al di fuori dei browserQuindi non ha preconcetti su come fare le cose.

Wednesday, May 22, 13

NASCE NODE.JS

Wednesday, May 22, 13

NASCE NODE.JSViene presentato alla javascript conf di Berlino

Wednesday, May 22, 13

NASCE NODE.JSViene presentato alla javascript conf di Berlino

La prima app di demo: un IRC Server, 400 linee di codice!

Wednesday, May 22, 13

NASCE NODE.JSViene presentato alla javascript conf di Berlino

La prima app di demo: un IRC Server, 400 linee di codice!

Ed e’ fatto per costruire network servers!

Wednesday, May 22, 13

NASCE NODE.JSViene presentato alla javascript conf di Berlino

La prima app di demo: un IRC Server, 400 linee di codice!

Ed e’ fatto per costruire network servers!

Il suo nome indica che e’ fatto per essere un nodo tra molti

Wednesday, May 22, 13

NASCE NODE.JSViene presentato alla javascript conf di Berlino

La prima app di demo: un IRC Server, 400 linee di codice!

Ed e’ fatto per costruire network servers!

Il suo nome indica che e’ fatto per essere un nodo tra molti

E’ adatto alla Cloud* per sua natura.

*Una volta si chiamava internetWednesday, May 22, 13

FATTI: IL COSTO DELL’I/O

• cache L1: 3 cicli

• cache L2: 14 cicli

• RAM: 250 cicli

•Disco: 41x10^6 cicli

•Network: 240x10^6 cicli

Wednesday, May 22, 13

ASYNC E NEXT TICK

Wednesday, May 22, 13

ASYNC E NEXT TICKle applicazioni node girano in un singolo thread

Wednesday, May 22, 13

ASYNC E NEXT TICKLe applicazioni node girano in un singolo thread

Questo comporta che ad ogni dato momento viene eseguito solo un task nell’event loop

Wednesday, May 22, 13

ASYNC E NEXT TICKLe applicazioni node girano in un singolo thread

Questo comporta che ad ogni dato momento viene eseguito solo un task nell’event loop

Possiamo immaginare l’event loop come una coda di callback

Wednesday, May 22, 13

ASYNC E NEXT TICKLe applicazioni node girano in un singolo thread

Questo comporta che ad ogni dato momento viene eseguito solo un task nell’event loop

Possiamo immaginare l’event loop come una coda di callbackAd ogni tick dell’event loop viene eseguida una delle callback

nella coda

Wednesday, May 22, 13

ASYNC E NEXT TICKLe applicazioni node girano in un singolo thread

Questo comporta che ad ogni dato momento viene eseguito solo un task nell’event loop

Possiamo immaginare l’event loop come una coda di callbackAd ogni tick dell’event loop viene eseguida una delle callback

nella codaNon c’e’ concorrenza ne’ multicore

Wednesday, May 22, 13

User NODE

NODE

Client Web Engine

Database

Logging facility Mass storage(big slow disk)

DB

Disk

ESEMPIO DI ARCHITETTURAIn questo modo i logs non rallentano piu’ i processi critici

Wednesday, May 22, 13

backend server

Mobile client

NodeJs instances

Mobile Client

ESEMPIO: LINKEDINLinkedin usa node.js come middleware layer tra il backend e le

applicazioni mobileWednesday, May 22, 13

UN CASO COMPLESSOIl backend di Save The Mom e’ tutto in node.js e ne sfrutta

pesantemente il modello asincrono con l’aiuto di bus e codeWednesday, May 22, 13

Recommended