Seminár z programovania v sieťach



Node.JS

Node.js je open-source, cross-platform prostredie JavaScript, ktoré spúšta kód JavaScriptu mimo prehliadača.

JavaScript sa používa predovšetkým na programovanie na strane klienta, v ktorom sú skripty napísané v tomto jazyku vložené do kódu HTML web stránky a spúšťajú sa na strane klienta pomocou JavaScript engine vo web prehliadači užívateľa.

Node.js umožňuje vývojárom používať JavaScript na písanie kódu na strane servera, aby tým vytvorili obsah dynamickej web stránky pred samotným odoslaním stránky do web prehliadača užívateľa.

V dôsledku toho predstavuje Node.js akúsi paradigmu "JavaScript everywhere", ktorá zjednocuje vývoj webových aplikácii pomocou jedného programovacieho jazyka, namiesto rôznych jazykov pre písanie skriptov na strane servera a na strane klienta.

Napísal ho Ryan Dahl v roku 2009.

Je asynchrónny a slúži na vytváranie webových serverov a sieťových nástrojov pomocou JavaScriptu a kolekcie modulov, ktoré zvládajú rôzne základné funkcie.

Moduly sú určené pre I/O operácie v súborovom systéme, sieťovaniu (DNS, HTTP, TCP, TLS/SSL, UDP), kryptografické funkcie, dátové streamovanie a ďalšie core funkcie.

Moduly používajú rozhranie API navrhnuté na zníženie zložitosti aplikácií na návrh serverov.

Je oficiálne podporovaný v systémoch Linux, MacOS, Microsoft Windows, SmartOS.

Najväčší rozdiel medzi Node.js a PHP je, že väčšina funkcií v PHP je blokovaných, kým sa neukončia (príkazy sa spúšťajú po dokončení predchádzajúcich), zatiaľ čo funkcie v Node.js sú neblokované (príkazy sa spúšťajú súbežne alebo dokonca paralelne a ako signál ukončenia alebo failu sa používajú callbacks).

Vývojari môžu vytvárať vysoko škálovateľné servery bez použitia threadingu, pomocou zjednodušeného modelu programovania riadeného eventami, ktorý používa spätné volania (callbacks) na signalizáciu dokončenia úlohy.

Spája jednoduchosť skriptovacieho jazyka JavaScript s výkonom Unixu.

Je postavený na Google V8 JavaScript engine.

Pre Node.js existuje mnoho open-source knižníc, ktoré sú dostupné na webových stránkach npm.

Web frameworky - Connect, Express.js, Socket.IO, Feathers.js, Koa.js, Hapi.js, Meteor a ďalšie.

Rôzne package slúžiace na prepojenie s inými jazykmi alebo runtime prostrediami ako je Microsoft .NET.

IDEs - Atom, JetBrains, WebStorm, MVS, NetBeans a podobne.



Technické črty

Node.js spracováva prichádzajúce requesty v slučke nazývanej event loop


Threading

Node.js pracuje na event loope s jedným vláknom a používa neblokované I/O volania, čo umožňuje podporovať desiatky tisíc konkurentných pripojení bez toho, aby vznikli nejaké náklady na prepínanie kontextu vlákien.

Tým pádom každá funkcia používajúca I/O funkcie musí používať spätné volania.

Využíva knižnicu libuv - používa thread pool s fixnou veľkosťou, ktorý spracováva niektoré neblokujúce asynchrónne I/O operácie.

Neumožňuje vertikálne škálovanie zvýšením počtu jadier CPU, a preto je potrebné použiť prídavný modul.

Je však možné zvýšiť predvolený počet threads v libuv thread pool.

Hlavné vlákno pošle úlohy do zdieľanej fronty úloh a vlákna v thread poole ich vyťahujú a vykonávajú.

Nezávislé neblokujúce systémové funkcie sa prenášajú na sockety na strane jadra.

Keď vlákno v poole dokončí úlohu, informuje hlavné vlákno, ktoré sa potom prebudí a vyšle registrovaný callback.

Keďže spracovanie callbacks v hlavnom vlákne je sériové, dlhotrvajúce výpočty a iné úlohy viazané na procesor zmrazia celý event loop až do dokončenia.


V8

V8 je engine na spúšťanie JavaScriptu, ktorý bol pôvodne vytvorený pre prehliadač Google Chrome.

Kompiluje zdrojový kód jazyka JavaScript do natívneho strojového kódu, namiesto jeho interpretácie v reálnom čase.


Package management

npm je predinštalovaný package management pre platformu Node.js.

Pozostáva z klienta a online databázy verejných a platených súkromných balíkov - npm register.

Dostupné balíky je možné prehliadať a vyhľadávať cez web stránku npm.

Inštaluje programy pre Node.js z registra npm, organizuje inštaláciu a spravuje programy tretej strany.

Balíky v registri sú vo formáte CommonJS a obsahujú súbor metadát vo formáte JSON.

Register nemá implementovanú žiadnu kontrolu, preto nájdené balíky môžu mať nízku kvalitu, alebo môžu byť škodlivé.

Aby npm takéto odobrali, spoliehajú sa na reporty od užívateľov.

V npm verzii 6 sa zaviedla funkcia auditu, ktorá pomáha vývojárom identifikovať a opraviť chyby a problémy s bezpečnosťou v nainštalovaných balíkoch.

Npm spravuje balíky, ktoré sú lokálnymi závislosťami konkrétneho projektu, ako aj globálne nainštalované nástroje JavaScriptu.

Pre lokálny projekt npm nainštaluje v jednom príkaze všetky závislosti projektu definované v súbore package.json


Zjednocujúce API

Node.js možno kombinovať s prehliadačom, databázou, ktorá podporuje údaje JSON (napríklad Postgres, MongoDB alebo CouchDB).

Umožňuje opätovné použitie rovnakého modelu a servisného rozhrania medzi klientskou a serverovou stránkou.



Úlohy

1. Stiahnuť a nainštalovať Node.JS: https://nodejs.org/en/download/
2. Stiahnuť a nainštalovať IDE Atom: https://atom.io/
3. Stiahnuť a nainštalovať databázu MongoDB: https://www.mongodb.com/download-center/community

Package.json: package.json

Jednoduchý web: web stránka

4. Nainštalovať packages pomocou npm

5. Vytvoriť službu na skracovanie URL adries

Skracovanie URL adries je technika na World Wide Web, v ktorej môže byť jednotný zdroj lokátora (URL) podstatne kratší, ale stále sa odkazovať na požadovanú stránku.

Využitie

- ak potrebujeme odoslať správu s odkazom, ktorá ma obmedzený počet znakov, môžeme odkaz skrátiť.

- "skrášlenie odkazu", sledovanie kliknutí, maskovanie pôvodnej adresy

Príklad: https://goo.gl/?fbclid=IwAR1TjfESoxwPoOkeZ6GY3bhHhhttcYKyjuW2mL6KA3xjvThmqSwXXZ53-GY


Hotový projekt: Skracovac

Nothing



nothing

Nothing


nothing