node.js – niskopoziomowe środowisko implementujące javascript po stronie serwera
DESCRIPTION
Node.js – niskopoziomowe środowisko implementujące JavaScript po stronie serwera. Na podstawie: Tilkov , S., Vinoski , S., Node.js : Using JavaScript to Build High-Performance Network Programs [W:] Internet Computing , IEEE, 2010, t. 14, nr 6, s. 80-83. Łukasz Przywarty 171018 - PowerPoint PPT PresentationTRANSCRIPT
Node.js – niskopoziomowe środowisko
implementujące JavaScript po stronie serwera
Łukasz Przywarty 171018Mariusz Kacała 171058
Na podstawie:
Tilkov, S., Vinoski, S., Node.js: Using JavaScript to BuildHigh-Performance Network Programs [W:] Internet
Computing, IEEE, 2010, t. 14, nr 6, s. 80-83.
Ramowy plan prezentacji
• Node.js - informacje wstępne
• Po co programistom node.js?
• Właściwości node.js
• Prosty serwer HTTP
• Manager pakietów npm
• Wielowątkowość a node.js
• Kiedy korzystać, a kiedy nie korzystać z node.js
3/16
Node.js – informacje wstępne
• Data utworzenia: 2009 r.
• Niskopoziomowa implementacja silnika V8
JavaScript’u po stronie serwera.
• Napisany w języku C/C++ (8000 linii) oraz
JavaScript (2000 linii), obsługuje programy
napisane w JavaScript.4/16
Node.js – informacje wstępne c.d.
• Obsługiwany zdarzeniami.
• Nieblokujące i asynchroniczne operacje I/O
oraz zapytania do bazy danych
• Zalety: wydajność w obsłudze zdarzeń
generowanych przez dużą liczbę użytkowników,
małe zużycie pamięci.
• Własny manager pakietów npm; liczne
frameworki.5/16
Po co programistom node.js?
• Apache i wątki - można łatwiej i wydajniej.
• Zbyt skomplikowane rozwiązania:
– Ruby Event Machine,
– Python Twisted/Tornado,
– Erlang (Facebook Chat).
• Przewaga: dużo lepsza dostępność (JavaScript)
i społeczność.
6/16
Sterowanie zdarzeniami
• Zdarzenie zamiast wątku.
• Event-loop.
7/16
Asynchroniczne operacje I/O
• Nie wyjątek, a reguła.
• Ważne dla programowania zdarzeniowego.
• Powodują problemy.
• W sytuacjach szczególnych (np. zmiana nazwy
pliku) istnieją wyjątki od asynchroniczności.
8/16
JavaScript po stronie serwera
• Kolejny krok w stronę kompleksowego
rozwiązania (ten sam język programowania dla
frontend’u i backend’u)
• JavaScript w zgodzie z filozofią node.js –
wsparcie funkcji zwrotnych zdarzeń (event
callback)
9/16
Wielowątkowość z node.js
• Jeden node.js – jeden proces.
• Rozwiązanie: wiele instancji serwera node.js
komunikujących się poprzez współdzielone
gniazdko
w systemie operacyjnym (200 linii kodu JavaScript)
10/16
Prosty serwer HTTP
var sys = require(“sys”), http = require(“http”), url = require(“url”), path = require(“path”), fs = require(“fs”);http.createServer(function(request, response) { var uri = url.parse(request.url).pathname; var filename = path.join(process.cwd(), uri); path.exists(filename, function(exists) { if(exists) { fs.readFile(filename, function(err, data) { response.writeHead(200); response.end(data); }); } else { response.writeHead(404); response.end(); } });}).listen(8080);sys.log(“Server running at http://localhost:8080/”);
11/16
Manager pakietów npm
• Bogaty ekosystem framework’ów.
• Ponad 16 300 pakietów.
• Najpopularniejsze:
– ExpressJs – framework dla aplikacji webowych,
– Socket.io – serwer WebSocket dla node.js (aplikacje czasu
rzeczywistego),
– Redis – serwer ‘struktur danych’,
– Coffee – język kompliowany do JavaScript.
12/16
Interesujące pakiety w npm
• Nodecopter – biblioteka do sterowania modelem
śmigłowca.
• Noduino – framework obsługujący podstawowe
podzespoły Ardunio przez sieć.
13/16
Kiedy korzystać z node.js?
• Deweloper znający język JavaScript.
• Aplikacje czasu rzeczywistego (np. Twitter,
relacje
z wydarzeń sportowych etc.).
• JSON/ Rest API dla aplikacji sieciowych.
• Aplikacje składające się ‘jednej podstrony' (np.
Gmail).
• Przesyłanie danych.14/16
Kiedy nie korzystać z node.js?
• Aplikacje korzystające z dużej ilości zasobów
CPU.
• Proste aplikacje typu CRUD.
• Gdy istnieje potrzeba skorzystania z biblioteki
w konkretnym języku.
15/16
Node.js – niskopoziomowe środowisko
implementujące JavaScript po stronie serwera
Łukasz Przywarty 171018
Na podstawie:
Tilkov, S., Vinoski, S., Node.js: Using JavaScript to BuildHigh-Performance Network Programs [W:] Internet
Computing, IEEE, 2010, t. 14, nr 6, s. 80-83.