Node.js – s JavaScriptem na server

Node.js je, když se podíváte na zahraniční vývojářské servery, pravděpodobně nejpopulárnějším tématem poslední doby. Přitom myšlenka použít JavaScript na straně serveru není nijak nová a Node.js není ani první, ani jediné řešení. Pojďme se stručně podívat na to, co je vlastně Node.js zač a jak se s ním pracuje.

JavaScript na serveru? Lidé, kteří mají s JS zkušenosti pouze zběžné a z klientů teď možná obrací oči v sloup a chystají se odplivnout: „Tyhlety novinky… prasárna největší! Vždyť JavaScript je synonymum pro memory leaks…“ Přitom JavaScript na serveru je takříkajíc obnošená vesta – už v roce 1996 bylo skriptování na straně serveru v JavaScriptu součástí produktu LiveWire od Netscape. Kdo pamatuje první verze ASP, jistě si vzpomene, že i v tomto serverovém řešení od Microsoftu šlo psát skripty nejen ve VBScriptu, ale i v JScriptu, což je MS „dialekt“ JavaScriptu (přesněji ECMAScriptu).

Poznámka na okraj: Zůstaneme u pochopitelného, zaběhnutého a – jak už to u takových termínů chodí – nepřesného označení JavaScript, i když bychom v dalším textu měli spíš hovořit o ECMAScriptu.

V8

JavaScript je interpretovaný jazyk a potřebuje tedy nějaký interpret, nějaké běhové prostředí, které se postará o provedení uživatelského skriptu. K nejznámějším patří SpiderMonkey (a další opičí mutace) či SquirrelFish. Téměř raketový vzestup popularity zažil ale engine V8, vytvořený Googlem pro prohlížeč Chrome.

Engine V8 totálně obrátil do té doby poměrně vyrovnané žebříčky rychlosti jednotlivých JS interpretů a svou rychlostí nechal veškerou konkurenci daleko za sebou. Navíc je jeho kód otevřený a poměrně snadno jej lze zabudovat do jiných aplikací, takže není divu, že právě nad tímto enginem vznikla řada aplikací, a mezi jinými i serverové engine. (Jedna z implementací JavaScriptu na serveru, v8cgi, pochází od Ondřeje Žáry a autor ji před časem představil v článku na Zdrojáku.)

CommonJS

Pokud se začnete rozhlížet ve světě serverových implementací JavaScriptu, dříve nebo později narazíte na CommonJS, což je neformální skupina, sdružující autory serverových JS implementací, a jejím cílem je sjednotit některé základní postupy a standardizovat je dřív, než se situace se server-side JS začne podobat situaci s JavaScriptem na klientech. Od této skupiny pochází např. návrh systému modulů či jednotkového testování, které implementuje právě Node.js.

Node.js

Node.js je „evented I/O framework for V8“, což si můžeme volně představit jako engine V8, rozšířený o funkce, které umožňují prováděným skriptům přistupovat k souborům či síťovým funkcím. Což v praxi znamená, že můžeme vytvořit server, který „naslouchá“ na určeném portu téměř stejným způsobem, jakým vytváříme například obslužné metody pro události v prohlížeči. Tedy:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Worldn');
}).listen(8080, "127.0.0.1");
console.log('Server bezi na http://127.0.0.1:8080/');

Na prvním řádku vás může překvapit funkce require()  – slouží k zavedení modulu a je právě součástí výše zmíněné specifikace CommonJS (Modules 1.0). Require zavede modul a zpřístupní funkce, které modul exportuje.

Modul http exportuje funkci createServer, jejímž jediným parametrem je callback funkce, která je zavolána při příchodu požadavku (listener funkce). Vrácen je objekt HTTPServer (kurziva je použita kvůli terminologickým puristům – autor si uvědomuje, že to není přesné vyjádření, ale předpokládá, že je srozumitelnější, a zájemce o neplodné debaty o objektové terminologii odkazuje na již proběhlou diskusi.) Tento objekt implementuje, mimo jiných, metodu listen() , jejímž povinným parametrem je číslo TCP portu, a dvěma nepovinnými jsou IP adresa, na níž server naslouchá, a callback funkce, která je zavolána v okamžiku navázání serveru na daný port.

Školení

Pracujete s HTML a chtěli byste své weby dostat na vyšší úroveň? Přijďte na školení JavaScript a AJAX, pořádané Akademií Root a naučte se používat moderní funkce dnešních prohlížečů. Naučíme vás používat JavaSctipt a AJAX, tvořit základní skripty a ovládnout web pomocí nových vlastností.

Obslužná funkce pro příchozí spojení, předaná jako parametr funkci createServer, dostane dva objekty – request a response. Tato dvojice obsahuje metody pro získání předaných parametrů dotazu, resp. metody pro předání výsledku.

Pokud si výše uvedený příklad uložíte do souboru hello.js, můžete jej spustit – nepřekvapivě – příkazem

node hello.js

Ale aby se něco stalo, musí být nejdřív Node.js nainstalován.

Instalace

Instalace Node.js je možná na POSIX systém – tedy máte-li na počítači třeba Linux nebo některý klon BSD, můžete si Node..js stáhnout, přeložit a používat. Na Windows pomůže buď virtuální stroj, nebo Cygwin. Pokud je vše bez problémů, vystačíte si se svatou trojicí configure; make; make install – zdrojové kódy obsahují i samotný V8 engine. Binární distribuce pro systémy existují, ale nejsou oficiálně dostupné v repozitářích; pokud dáte přednost instalaci z balíčků, bez hledání informací po nejrůznějších webech se neobejdete.

Poznámka: Při pokusech s Ubuntu 10.04 jsem využil node.js .deb balíčku, který spravuje Jerome Etienne. Chcete-li si přeložit vlastní Node.js ze zdrojových kódů, možná oceníte tento návod.

K čemu to vlastně…

Node.js je stále populárnější, i když jej nelze rozhodně považovat za nějakou mature technologii vhodnou pro enterprise nasazení. Jeho výhodou je, že je malý, snadno použitelný, využívá jazyk, který je webařům známý, aplikace v něm napsané lze snadno škálovat a poměrně rychle v něm napíšete např. obslužný server pro WebSockets. Ostatně můžete se podívat na pěkné shrnutí Why You Should Pay Attention to Node.js.

Node.js nabízí, na rozdíl od modelu „co spojení, to vlákno“, model založený na událostech a jejich asynchronním zpracování. Je v něm tedy mnohem jednodušší psát vlastní (neblokující) servery než např. se o totéž pokoušet v PHP. Svým zaměřením se řadí někam k frameworkům jako jsou Twisted pro Python či EventMachine v Ruby. Existují pro něj i nadstavby, které umožní soustředit se na vlastní obsluhu požadavků, jako je například Sinatrou inspirovaný ExpressJS.

Už z počtu zpráv o Node.js, které se objevují, lze usuzovat, že vzbudil poměrně velký zájem. Je implementován ve WebOS. Je dostupný pro .NET. Vznikají pro něj nové moduly v C++. Jsou o něm psány knihy. Používá jej stále víc firem. Vyplatí se se s ním seznámit…

Líbí se vám Node.js?

Kde se s Node.js seznámit?

Svou cestu za poznáním tohoto zajímavého nástroje můžete začít třeba u Understanding Node.js – to pokud stále ještě váháte, proč a nač Node.js použít. Pokračovat můžete na Node.js wiki, v tutoriálu zjistíte, jak napsat jednoduchý HTTP server a streamer zpráv z Twitteru, můžete se podívat na pokusy s Node.js. A budete potřebovat dvě zásadní adresy – tady jsou:

Hodně štěstí při používání Node.js. Pokud bude zájem, přineseme vám o tomto nástroji další informace pro praktické použití…

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 34

Přehled komentářů

honzzz pokračování
xx Re: Node.js - s JavaScriptem na server
Jiří Bažant Re: Node.js - s JavaScriptem na server
xx Re: Node.js - s JavaScriptem na server
Jiří Bažant Re: Node.js - s JavaScriptem na server
xx Re: Node.js - s JavaScriptem na server
KLoK Maji pekne udelanou tu dokumentacei k API
Ladislav Thon Re: Maji pekne udelanou tu dokumentacei k API
fos4 Databáze
mamlasek k cemu to je?
pk Re: k cemu to je?
xx Re: k cemu to je?
pk Re: k cemu to je?
xx Re: k cemu to je?
Aleš Roubíček Re: k cemu to je?
xx Re: k cemu to je?
Aleš Roubíček Re: k cemu to je?
pk Re: k cemu to je?
pk Re: k cemu to je?
xx Re: k cemu to je?
Jan Kodera Re: k cemu to je?
xx Re: k cemu to je?
Jan Kodera Re: k cemu to je?
blizzboz Re: k cemu to je?
keff Re: k cemu to je?
keff Re: k cemu to je?
Petr Bravenec ECMA script je výborný prostředek i pro tvorbu programovatelných aplikací
BS-Harou more
HuB Další díl
optik už aby to bylo mature
blizzboz Re: už aby to bylo mature
zzen Re: už aby to bylo mature
cerw Node knockout.com
zzen Re: Node knockout.com
Zdroj: https://www.zdrojak.cz/?p=3320