{"id":68,"date":"2014-10-17T19:41:28","date_gmt":"2014-10-17T17:41:28","guid":{"rendered":""},"modified":"2018-09-17T21:53:43","modified_gmt":"2018-09-17T19:53:43","slug":"nodejs-alebo-javascript-server","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/nodejs-alebo-javascript-server\/","title":{"rendered":"NodeJS alebo JavaScript server"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/46f5asd.png\" alt=\"Obr\u00e1zok\" width=\"300\" height=\"150\" \/>\u201eJavaScript na servery? Si si ist\u00fd?\u201c Tak to je \u010dast\u00e1 ot\u00e1zka, ktor\u00fa po\u010dujem, ak niekomu prv\u00fdkr\u00e1t poviem o NodeJS. NodeJS je toti\u017e framework, ktor\u00fd umo\u017enil jazyku roz\u0161\u00edren\u00e9mu v internetov\u00fdch prehliada\u010doch fungova\u0165 na strane servera. V tomto \u010dl\u00e1nku si povieme nie\u010do o tom, \u010do to vlastne NodeJS je.<!--more--><!--break--><\/p>\n<p>NodeJS je server, ktor\u00fd dok\u00e1\u017eete spusti\u0165 a on bude na\u010d\u00fava\u0165 prich\u00e1dzaj\u00facim dotazom, a z\u00e1rove\u0148 je runtime prostredie, ktor\u00e9 poskytuje API umo\u017e\u0148uj\u00face v\u00e1m realizova\u0165 r\u00f4zne \u00falohy serverovsk\u00e9ho typu. Je postaven\u00fd na Single Event Loop a Non Blocking IO. To s\u00fa dva z\u00e1kladn\u00e9 princ\u00edpy, a preto si ich vysvetl\u00edme trochu bli\u017e\u0161ie.<\/p>\n<p>Single Event Loop znamen\u00e1, \u017ee NodeJS v z\u00e1sade be\u017e\u00ed len v jednom vl\u00e1kne (je mo\u017en\u00e9 ho spusti\u0165 aj vo viacer\u00fdch vl\u00e1knach, ale to je sk\u00f4r \u0161peci\u00e1lny pr\u00edpad). Je to teda rozdiel oproti mno\u017estvu in\u00fdch serverov, ktor\u00e9 pre ka\u017ed\u00fa prich\u00e1dzaj\u00facu po\u017eiadavku sp\u00fa\u0161\u0165aj\u00fa samostatn\u00e9 vl\u00e1kno, ktor\u00e9 ju m\u00e1 obsl\u00fa\u017ei\u0165. V NodeJS jedno vl\u00e1kno obsluhuje v\u0161etky dotazy, ktor\u00e9 na server prich\u00e1dzaj\u00fa. To znie ako stra\u0161ne pomal\u00fd server, ktor\u00fd bude blokova\u0165 v\u0161etky ostatn\u00e9 dotazy, k\u00fdm neobsl\u00fa\u017ei ten jeden, ktor\u00fd pri\u0161iel ako prv\u00fd. Aby tomu tak nebolo, m\u00e1me tu Non Blocking IO. To znamen\u00e1, \u017ee NodeJS v\u0161etky oper\u00e1cie, ktor\u00e9 trvaj\u00fa dlho (\u010do s\u00fa v z\u00e1sade oper\u00e1cie s datab\u00e1zou, s\u00faborov\u00fdm syst\u00e9mom alebo sie\u0165ov\u00e9 oper\u00e1cie), vykon\u00e1va asynchr\u00f3nne. To znamen\u00e1, \u017ee to jedno vl\u00e1kno ne\u010dak\u00e1 za pomal\u00fdmi oper\u00e1ciami, ale vykon\u00e1 svoj k\u00f3d, spust\u00ed pomal\u00fa oper\u00e1ciu a za\u010dne obsluhova\u0165 \u010fal\u0161iu po\u017eiadavku. Ke\u010f asynchr\u00f3nna oper\u00e1cia skon\u010d\u00ed, NodeJS op\u00e4\u0165 vykon\u00e1 k\u00f3d, ktor\u00fd je reakciou na jej ukon\u010denie a op\u00e4\u0165 sa venuje in\u00fdm \u00faloh\u00e1m. Je to teda jedno vl\u00e1kno, ktor\u00e9 sa r\u00fdchlo a na kr\u00e1tku dobu prep\u00edna medzi r\u00f4znymi \u00falohami.<\/p>\n<p>Ot\u00e1zka je, na \u010do je to vlastne dobr\u00e9. Autori NodeJS tvrdia, \u017ee to m\u00e1 dve v\u00fdhody:<\/p>\n<ol>\n<li>n\u00edzke n\u00e1roky na pam\u00e4\u0165 servera,<\/li>\n<li>odpad\u00e1 komplexnos\u0165 z paraleln\u00e9ho vykon\u00e1vania.<\/li>\n<\/ol>\n<p>Jedno vl\u00e1kno zaber\u00e1 omnoho menej pam\u00e4te ako viac vl\u00e1kien a ke\u010f\u017ee v\u0161etok k\u00f3d sa vykon\u00e1va sekven\u010dne v jednom vl\u00e1kne, tak neexistuje \u017eiaden paralelizmus, ktor\u00fd by trebalo \u0161peci\u00e1lne rie\u0161i\u0165.<\/p>\n<p>Pre programovanie v NodeJS znamen\u00e1 t\u00e1to architekt\u00fara dve veci:<\/p>\n<ol>\n<li>v\u0161etko je event-driven. Pri pr\u00e1ci s NodeJS sa pripravte na pr\u00e1cu s callbackami,<\/li>\n<li>v\u0161etky akcie, ktor\u00e9 trvaj\u00fa dlho, treba vykon\u00e1va\u0165 asynchr\u00f3nne.<\/li>\n<\/ol>\n<p>Ako som spomenul na za\u010diatku, NodeJS obsahuje tie\u017e sadu API, ktor\u00e1 umo\u017e\u0148uje vykon\u00e1va\u0165 r\u00f4zne oper\u00e1cie relevantn\u00e9 pre prostredie servera:<\/p>\n<ul>\n<li>HTTP \u2013 asi jedno z najpou\u017e\u00edvanej\u0161\u00edch rozhran\u00ed. Umo\u017e\u0148uje odpoveda\u0165 na HTTP dotazy<\/li>\n<li>I\/O \u2013 pr\u00e1ca so s\u00fabormi pomocou Streams a Buffers<\/li>\n<li>DNS\/URL \u2013 pomocn\u00e9 API na pr\u00e1cu s DNS a URL<\/li>\n<li>Crypto \u2013 kryptografick\u00e9 oper\u00e1cie<\/li>\n<li>Processes \u2013 interakcia s opera\u010dn\u00fdm syst\u00e9mom<\/li>\n<li>Cluster \u2013 umo\u017e\u0148uje spusti\u0165 NodeJS v clustri. To je pr\u00edpad, kedy NodeJS be\u017e\u00ed vo viacer\u00fdch vl\u00e1knach<\/li>\n<li>\u010fal\u0161ie&#8230;<\/li>\n<\/ul>\n<p>Samozrejme nesmie ch\u00fdba\u0165 spolupr\u00e1ca s datab\u00e1zami, ktor\u00e1 je zastre\u0161en\u00e1 NodeJS kni\u017enicami pre jednotliv\u00e9 datab\u00e1zy. To, \u017ee napoji\u0165 NodeJS na datab\u00e1zu by nemal by\u0165 probl\u00e9m, vypl\u00fdva aj z mno\u017estva kni\u017en\u00edc pre tento \u00fa\u010del, ktor\u00fd je mo\u017eno n\u00e1js\u0165 na tejto (aj ke\u010f u\u017e neudr\u017eiavanej) str\u00e1nke: <a href=\"https:\/\/github.com\/joyent\/node\/wiki\/modules#database\">https:\/\/github.com\/joyent\/node\/wiki\/modules#database<\/a><\/p>\n<p>Hore vymenovan\u00fd zoznam predstavuje z\u00e1kladn\u00fa mno\u017einu API. NodeJS je ale \u013eahko roz\u0161irovate\u013en\u00fd a existuje pomerne ve\u013ek\u00e9 mno\u017estvo modulov (53 514 v tomto momente, aby som bol presn\u00fd), ktor\u00e9 je mo\u017en\u00e9 doin\u0161talova\u0165 a pou\u017e\u00edva\u0165. Aby ich in\u0161talovanie a pou\u017e\u00edvani bolo jednoduch\u0161ie, bol vytvoren\u00fd Node Packet Manager \u2013 skratka <em>npm<\/em>. Ten aj s jeho datab\u00e1zou bal\u00edkov je mo\u017en\u00e9 n\u00e1js\u0165 na adrese <a href=\"https:\/\/npmjs.org\/\">https:\/\/npmjs.org\/<\/a>.<\/p>\n<p>\u010co doda\u0165 na z\u00e1ver? NodeJS je server, ktor\u00fd si pomerne r\u00fdchlo na\u0161iel svoje miesto v IT svete. Medzi prehliada\u010dov\u00fdm klientom, ktor\u00fd rozumie JavaScriptu a r\u00e1d komunikuje pomocou JSON, a nov\u00fdmi NoSQL datab\u00e1zami, ktor\u00e9 tie\u017e ob\u013eubuj\u00fa JSON, ch\u00fdbal medzikus, ktor\u00fd by si s JavaScriptom a JSONom tie\u017e dobre rozumel. NodeJS je presne ten medzikus, postaven\u00fd na princ\u00edpe Single Event Look a Non Blocking IO a z\u00e1soben\u00fd pomerne ve\u013ek\u00fdm mno\u017estvom modulov. Ke\u010f\u017ee je to mlad\u00fd server, a\u017e \u010das uk\u00e1\u017ee, ako dobr\u00fd je to n\u00e1stroj. Pre pr\u00edpad, \u017ee v\u00e1s NodeJS zaujal, tak u\u017e len linka, kde treba za\u010da\u0165: <a href=\"http:\/\/nodejs.org\/\">http:\/\/nodejs.org\/<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>\u201eJavaScript na servery? Si si ist\u00fd?\u201c Tak to je \u010dast\u00e1 ot\u00e1zka, ktor\u00fa po\u010dujem, ak niekomu prv\u00fdkr\u00e1t poviem o NodeJS. NodeJS je toti\u017e framework, ktor\u00fd umo\u017enil jazyku roz\u0161\u00edren\u00e9mu v internetov\u00fdch prehliada\u010doch fungova\u0165 na strane servera. V tomto \u010dl\u00e1nku si povieme nie\u010do o tom, \u010do to vlastne NodeJS je.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":1,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":167,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/68\/revisions\/167"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}