Node.js
Transkrypt
Node.js
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 Temat projektu inżynierskiego: Narzędzie do tworzenia stron WWW bez znajomości HTML metodą przeciągnij i upuść w oparciu o szablony Łukasz Przywarty 171018 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 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