NodeJs – A szerver-oldali báránybőrbe bújt farkas

By | 2013. április 05.

Egy korábbi post-omban írtam arról, hogy megpróbálkozom a APE server telepítésével és későbbi használatával. Nos, ebből az valósult meg, hogy a sikeres (bár cseppet sem gördülékeny) telepítés után megállt a tudomány, mivel a project erősen vegetatív  állapotban van pár éve a fejlesztők részéről, ráadásul a jelenlegi állapotában lévő oldal hemzseg a 404-ektől dokumentáció terén. Ezek miatt az okok miatt vált inkább nyűglődéssé, mint sem érdekessé a szolgáltatás működésre bírása és kipróbálása. Hosszabb-rövidebb próbálkozások után parkolópályára került, majd az érdektelenség lápos talaján elnyelte a mélység…

Már azt hittem, hogy megint hónapokra feledésbe merül az alapötlet és nem fogom tudni eszköz és idő hiányában ezt a felettéb érdekes területet felfedezni, amikor eszembe jutott, hogy anno a kollégáim emlegettek egy érdekes nevet, amivel még nem volt időm foglalkozni behatóan. Ez pedig nem más, mint a NodeJs. És igen, kedves olvasó, jól gondolja/mondja… ez alternatívája az APE-nek. Sőt!

Mi is aza NodeJs?

Nagyon leegyszerűsítve a NodeJs egy olyan platform/rendszer, amely a Google Chrome V8 JavaScript Engine-re épülve, szerver oldalon képes JavaScript nyelven írt, eseményvezérelt, asszinkron, non-blocking hálózati alkalmazásokat futtatni, rendkívül gyorsan és remekül skálázható módon. Az egész program egyetlen hurokban (event loop) fut és minden benne keletkezett esemény asszinkron, tehát nem blokkolódik futás közben, ergo nem kell várni, hogy a művelet befejeződjön, így vele párhuzamosan tudunk futtatni több műveletet.

A fejlesztő (Ryan Dahl) alap-elképzelése amúgy az volt 2009-ben, hogy ír egy asszinkron webszervert.

Tudom, ez így elsőre nagyon kacifántosan hangzik, de ha még egyszerűbben akarnánk szemléltetni a dolgot, akkor három példát tudnék mondani rá kapásból:

  • Ebay aukciós megoldás: Ahogy licitálunk és az oldal frissítése nélkül, azon nyomban, real-time szerzünk tudomást arról, ha valaki más rálicitált a mi összegünkre
  • Gmail, GTalk: nézzük az oldalt, és amit kapunk egy levelet, megjelenik az Beérkezett üzenetek között, illetve a csevegés egyből megjelenik, amint üzenetet kapunk, illetve „látjuk”, ha a másik fél éppen gépeli az üzenetet, amit el fog küldeni.
  • Weboldalakon lévő on-line chat szolgáltatások az ügyfélszolgálattal való beszélgetéshez

Az említett példák mind hasonló technológiát használnak. Egész pontosan az Ebay e NodeJs-t használja. Rajtuk kívül még a LinkedIn is és még sorolhatnám a nevesebb cégeket.

A rendszer népszerűségét remekül tükrözi az is, szinte minden platformon megtalálható, rendkívül egyszerűen telepíthető (Debian-on a Sid release-ben már a hivatalos csomagok között is szerepelni fog!) és rettentő sok plugin létezik hozzá, melyeknek a száma folyamatosan csak nő és meglévő csomagokat állandóan frissítik.

A post írásakor a NodeJs aktuális verziója v0.10.3

Telepítés

A tesztkörnyezetet egy Debian (v6.x) Linux szerveren fogom kialakítani. Kezdjük azzal, hogy root-ként belépünk a szerverre és letöltjük a NodeJs-t, majd kicsomagoljuk:

mkdir ~/nodejs && cd $_ wget -N http://nodejs.org/dist/node-latest.tar.gz tar xzvf node-latest.tar.gz && cd `ls -rd node-v*`

A fordításhoz szükség lesz python-ra és g++-ra, valamint a make-re

apt-get install python g++ make

Végezzük el a konfigurálást és fordítást, majd a telepítést:

./configure make install

Ezzel készen is vagyunk a telepítéssel! Ugye nem is volt nehéz?! :)

Hello World!

Hozzunk létre egy könyvtárat magunknak, amben a példa file-okat fogjuk tárolni és futtani node-dal. Ez az én esetemben a nodejs_apps lesz.

mkdir ~/nodejs_apps && cd $_ 

Hozzunk létre egy file-t, test01.js néven és legyen csak ennyi a tartalma:

console.log(‘Hello World!’);

Majd mentés után adjuk ia következő parancsot:

$ node test01.js

Ekkor a konzolon a „Hello World!” szövegnek kell megjelennie. Sikerült, működik a NodeJs-ünk! :)

Mint említettem korábban, a készítő eredeti célja egy webszerver létrehozása volt. Nos, ez sikerült neki és mi is meg tudjuk tenni. Ezzel a rendszerrel saját magunknak készíthetünk egy személyre szabott webszervert, mert a mi játékszabályunk szerint működik és szolgálja ki a hozzá befutó kéréseket. Lássunk egy példát, mely segítségével egy teljesen alap szervert hozunk létre!

Hozzunk létre egy újabb file-t, melynek a neve most legyen test02.js és a következő pár sort írjuk kódként bele:

var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World!\n');
}).listen(8080);

console.log('Server running at http://127.0.0.1:8080/');

Most futtassuk node-dal:

$ node test02.js

A webszerverünk elindul és várakozik a beérkező kérésekre, mely tényt a konzolon megjelenő üzenettel is megerősíti.

FIGYELEM! A példában a szerver a 8080-as porton fog futni, így ha már valamely más program használja ezt a portot, válasszunk másikat a példához.

Most pedig nyissuk meg egy böngészővel a http://127.0.0.1:8080/ -as URL-t. Ha minden jól megy, megkapjuk a „Hello World!” szöveget a böngészőnkben.

Gratulálok, sikeresen telepítettük a NodeJs-t és túl vagyunk az első két mini-alkalmazásunk futtatásán!

A következő post-ban a témával kapcsolatban megnézzük, hogy hogyan lehet különböző modulokat/plug-in-eket telepíteni a NodeJs-hez és alkalmazni őket.

 

Hasonló cikkek

Git szerver telepítés Synology NAS-on Az otthoni munkáim során is szükség van verziókövető rendszerre a fejlesztéseknél. A legkézenfekvőbb megoldás, hogy a már amúgy is használatban lévő N...
NodeJs – Modulok Egy korábbi post-ban bemutattam, hogy mi is a NodeJs és hogyan kell telepíteni, valamint túl vagyunk az első "Hello World!" programunkon is. A mostani...
Z-index TOP list Minap belefutottam egy problémába, ahol kellett volna kapásból látnom, hogy a DOM-ban lévő elemeknek -ha van, mik a z-index értékei. Gyorsan írtam ...
NodeJs NPM – A nyakkendős modulraktáros A előző NodeJs postban a modulokat taglaltam. Most nézzük meg, hogy mi van, ha nem mi írunk magunknak, hanem már előre elkészített modul-csomagokat sz...