Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

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 World\n');
}).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…

Anketa

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í…

Martin Malý

Martin Maly

Začal programovat v roce 1984 s progra­movatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď je rád, že neprogramuje…

Školení: Hackujeme operační systém Android

 

Školení vám ukáže, jak se dostat k Linuxu (tzv. "rootování"), který se pod hezkou tváří Androida skrývá a jak ho naplno využít. Pomůže vám to při záloze dat, zvětšování prostoru pro aplikace nebo sdílení připojení k internetu a pokud chcete z telefonu dostat opravdové maximum, ukážeme vám, jak v něm vyměnit kompletní systém za lepší.

Podrobnější informace a přihláška

Přehled názorů

pokračování
honzzz 7. 9. 2010 01:16
Nový
Re: Node.js - s JavaScriptem na server
xx 7. 9. 2010 09:06
Nový
└ 
Re: Node.js - s JavaScriptem na server
Jiří Bažant 7. 9. 2010 21:32
Nový
 
└ 
Re: Node.js - s JavaScriptem na server
xx 7. 9. 2010 21:41
Nový
 
 
└ 
Re: Node.js - s JavaScriptem na server
Jiří Bažant 8. 9. 2010 21:38
Nový
 
 
 
└ 
Re: Node.js - s JavaScriptem na server
xx 8. 9. 2010 21:56
Nový
Maji pekne udelanou tu dokumentacei k API
KLoK 7. 9. 2010 09:34
Nový
└ 
Re: Maji pekne udelanou tu dokumentacei k API
Ladislav Thon 7. 9. 2010 11:40
Nový
Databáze
Petr Bíža 7. 9. 2010 09:46
Nový
k cemu to je?
mamlasek 7. 9. 2010 11:41
Nový
├ 
Re: k cemu to je?
pk 7. 9. 2010 13:05
Nový
│
└ 
Re: k cemu to je?
xx 7. 9. 2010 17:07
Nový
│
 
└ 
Re: k cemu to je?
pk 7. 9. 2010 22:14
Nový
│
 
 
└ 
Re: k cemu to je?
xx 8. 9. 2010 07:47
Nový
│
 
 
 
├ 
Re: k cemu to je?
Aleš Roubíček 8. 9. 2010 09:01
Nový
│
 
 
 
│
└ 
Re: k cemu to je?
xx 8. 9. 2010 10:36
Nový
│
 
 
 
│
 
└ 
Re: k cemu to je?
Aleš Roubíček 8. 9. 2010 12:47
Nový
│
 
 
 
└ 
Re: k cemu to je?
pk 8. 9. 2010 13:11
Nový
│
 
 
 
 
├ 
Re: k cemu to je?
pk 8. 9. 2010 13:13
Nový
│
 
 
 
 
└ 
Re: k cemu to je?
xx 8. 9. 2010 13:39
Nový
├ 
Re: k cemu to je?
Jan Kodera 7. 9. 2010 17:09
Nový
│
└ 
Re: k cemu to je?
xx 7. 9. 2010 17:12
Nový
│
 
└ 
Re: k cemu to je?
Jan Kodera 7. 9. 2010 18:43
Nový
│
 
 
└ 
Re: k cemu to je?
blizzboz 7. 9. 2010 22:48
Nový
└ 
Re: k cemu to je?
Tomáš Kafka 7. 9. 2010 17:27
Nový
 
└ 
Re: k cemu to je?
Tomáš Kafka 7. 9. 2010 17:54
Nový
ECMA script je výborný prostředek i pro tvorbu programovatelných aplikací
Petr Bravenec 7. 9. 2010 11:57
Nový
more
BS-Harou 7. 9. 2010 13:31
Nový
Další díl
HuB 7. 9. 2010 15:36
Nový
už aby to bylo mature
optik 7. 9. 2010 21:26
Nový
├ 
Re: už aby to bylo mature
blizzboz 7. 9. 2010 22:51
Nový
└ 
Re: už aby to bylo mature
zzen 13. 9. 2010 12:50
Nový
Node knockout.com
Petr Cervenka 8. 9. 2010 04:35
Nový
└ 
Re: Node knockout.com
zzen 13. 9. 2010 12:27
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem