APE Server – 1. rész: A Majom leszállt

By | 2012. november 24.

Tegnap Friday afternoon Project keretén belül elkezdtem feltelepíteni egy APE szervert. Már rég óta tervezem ezt, de eddig még nem jutott rá időm sajnos. Jelenleg is félkész a dolog, ezért is lesz az esetről több részes post. Ez az első rész a telepítésről fog szólni.

Mi is ez?

Az APE az AJAX Push Engine rövidítése. Egy nyílt forráskódú megoldásról beszélünk, mely az AJAX Push technológiára épül.Egészen tömören egy bármilyen típusú adat valós időben történő stream-elérését teszi lehetővé a kliens oldal felé anélkül, hogy a kliens oldalon ennek fogadására, folyamatos ellenőrzésére bármit is fel kellene telepíteni. Aki használta már az ebay-t licitálásra, tudja, hogy miről is beszélek például. A licitálás, a licitálások figyelése ezen az elven működik. Amikor folyamatosan értesül a felhasználó a változásokról (licitemelkedés) anélkül, hogy frissítette volna az oldalt vagy folyamatos háttérbeli frissítések történnének pull metódussal. Két komponense van a project keretén belül: a szerveroldali, illetve a kliens oldali megvalósítás. Nyilván a lényeg a szerver oldalon van, a kliens oldal főként a demonstrációhoz szükséges a projectben.

Hogyan működik?

A szerver oldal

Nem bonyolódnék nagyon a részletekbe, csak annyit magyaráznék el, amennyi feltétlenül szükséges a használathoz, az elv megértéséhez. Az APE egy önálló szerver ugyan, de nem helyettesíti a meglévő webszerverünket (Apache, Lighttpd vagy Nginx). Ugyan implementálva vannak a POST és GET kérések a HTTP protokollból, de az APE csak az AJAX Push kéréseket szolgálja ki.

Tehát a kliens oldalon beállítunk javascript-ben egy szerverkapcsolatot az APE szerverünkkel egy bizonyos porton keresztül és ők ott szépen kommunikálnak egymással real-time a többi HTTP kéréssel párhuzamosan, abba nem belezavarva. Ha van valami változás a szerver oldalon, amit a kliens felé kommunikálni kell, csak egy AJAX Push-t küldd ki a szerver és minden kliens, aki a rákapcsolódott az APE-re, egyből értesül erről.

A szerver oldal rendelkezik MySQL konnektorral, tehát adatbázissal is együtt képes dolgozni. Beépített üzenet-kezelő rendszere (Message Queue system) van, valamint a MooTools framework-ön alapul, de bedrótozható a közkedvelt jQuery is. Én ez utóbbit fogom használni.

A kliens oldal

Szintén a MooTools Library-n alapul, de támogatja a más keretrendszerek használatát is természetesen. Sokféle módon képes adatot cserélni a szerverrel: XHRStreaming, JSONP, SSE, stb. Az APE Javascript Framework (kliens oldal) semmi mást nem tesz, csak a szervertől fogadja az adatokat (RAW-ok), majd feldolgozás után visszaküldi a felhasználó parancsait (CMD-k). Mindezt egy igen kis méretű (kb. 10KB) adatforgalommal, mely ezáltal tökéletesen alkalmassá teszi mobilhálózatokon történő felhasználásra is.

Az APE protokoll

A kliens és a szerver oldal a saját kommunikációjához, a saját protokolljukat használják. Erről nekünk nem kell részletesen tudnunk semmit, csak annyit, hogy gyorsa, sávszélesség-takarékos és támogatja a JSON adatszerkezetet. Nekünk ennyi bőven elég is! :)

Telepítés

Hozzávalók:

  • VirtualBox
  • Debian install
  • Apache, PHP, MySQL
  • Git

Akkor lássunk is hozzá. Első körben felhúzunk egy Debian-t a VirtualBox-ban. Erre külön nem térnék ki, hogy hogyan kell. Az egy másik how-to lenne … :)

Miután megvan, lépjünk be root-ként, hogy ne kelljen sudo-zni feleslegesen. Úgyis csak fejlesztéshez, teszteléshez használjuk ezt a szervert.

Lássuk, hogy én miket tettem fel a friss Squeeze 6.0.6-os rendszerre:

apt-get install mc screen
apt-get install apache2

Próbáljuk ki, hogy működik-e a webszerverünk. Az én Debian-om a 10.200.40.77-es IP-t kapta, így a böngészőmbe ezt írom. Remélhetőleg mindenki megkapja az „It works!” szöveget. Jöhet a PHP telepítése.

apt-get install php5

Ezek után a DirectoryIndex direktívát állítsuk át az Apache konfigjában, hogy a php file-okat keresse először, tehát első legyen az index.php, aztán jöhet az index.html. Hozzunk létre a webszerveren egy index.php file-t és a tartalma semmi más ne legyen, csak ennyi:

<?php
  phpinfo();
?>

Elleőrizzük le a böngészőben, hogy működik-e a PHP-nk. Frissítsük az oldalunkat és egy PHP-s önteszt kellene, hogy megjelenjen. Ha ez is megvan, akkor jöhet a GD kiegészítő amivel PHP-ban tudunk képmanipulálást végezni.

apt-get install php5-gd

Következő lépés a MySQL szerver

apt-get install mysql-server libmysqlclient-dev

Kis kiegészítés a PHP-nak, hogy képes legyen kezelni:

apt-get install php5-mysql

Indítsuk újra az Apache-ot

/etc/init.d/apache2 restart

Tegyünk fel egy FTP szervert

apt-get install pure-ftpd-mysql

Egy Zip tömörítőt

apt-get install zip gzip
apt-get install autoconf2.13

Valamint a Git-hez szüséges alapdolgokat, hogy le tudjuk rántani a legfrissebb APE forrást a fordításhoz

apt-get install git git-core

Létrehozunk egy ape könyvtárat, és lehúzzuk a latest verziót az APE-ből

mkdir ape
cd ape
git clone git://github.com/APE-Project/APE_Server.git
git clone git://github.com/APE-Project/APE_JSF.git

Jöhet a lényegi rész, álljunk neki befordítani a szerverünket

cd APE_Server
./build.sh

Előfordulhat, hogy elsőre nem fog lefutni a telepítés hiba nélkül. Én a következőkbe futottam bele:

Hiba

configure: error: installation or configuration problem: C++ compiler cannot create executables.
.
.
.
libape-spidermonkey.c:28:19: error: jsapi.h: No such file or directory

Megoldás

./deps/js/src/configure

Ha ennél is hiba merülne fel:

checking whether the C++ compiler (gcc&nbsp; ) works… no
configure: error: installation or configuration problem: C++ compiler cannot create executables.

cat ./deps/js/src/config.log

[…]
gcc: error trying to exec ‘cc1plus’: execvp: No such file or directory
[…]

Megoldás

apt-get install g++
./deps/js/src/configure
cd deps/js/src/
make clean
make all
make install
cd ../../..
./deps/udns-0.0.9/configure

Ha a build-nél a következő hibát kapjuk:

/usr/bin/ld: cannot find -lmysac

Megoldás

./modules/deps/mysac/make

Amennyiben a fenti hibákon túljutottunk (ha voltak), akkor most próbáljuk újra a build-et újra. Ha minden jól meg, hiba nélkül lefut majd.

./build.sh

Ezután pedig csak két lépés maradt:

make
make install

Ha ez is megtörtént, akkor már csak el kell indítanunk az APE szerverünket (akár egy screen-ben):

./bin/aped

    _   ___ ___
/_\ | _ \ __|
/ _ \|  _/ _|
/_/ \_\_| |___|
AJAX Push Engine

Bind on port 6969

Version : 1.1.2-dev
Build   : Nov 23 2010 17:02:22
Author  : Weelya (contact@weelya.com)

[Module] [spidermonkey] Loading module : Javascript embeded (0.01) – Anthony Catel
[JS] Loading script ../scripts/framework/mootools.js…
[JS] Loading script ../scripts/framework/Http.js…
[JS] Loading script ../scripts/framework/userslist.js…
[JS] Loading script ../scripts/utils/utils.js…
[JS] Loading script ../scripts/commands/proxy.js…
[JS] Loading script ../scripts/commands/inlinepush.js…
[JS] Loading script ../scripts/examples/nickname.js…
[JS] Loading script ../scripts/examples/move.js…
[JS] Loading script ../scripts/utils/checkTool.js…

A következő részben elkezdek belemerülni majd az APE használatába. Stay tuned… ;)

Hasonló cikkek

Hogyan csináljunk videót képekből Windowson Adott egy könyvtár, amiben van több száz alkönyvtár, amelyek mindegyikében van több ezer jpg kép. Ezekből kellene videót gyártani... automatizáltan......
phpMyAdmin + mysqli hiba fix Ha egy PHP 5.3 és egy Apache 2.2 találkozik egy Debian 7.x-en, akkor egy standard telepítés és konfigurálás után alapból nyivákolni fog a phpMyAdmin, ...
NodeJs + Express és a HTTPS Előfordulhat, hogy szükségünk van egy SSL-es webszerverre a NodeJs-es környezetünkben. Ugyebár webszervert Express-szel a legegyszerűbb készíteni, ami...
Apache újraindítása Terminal-ból OSX-ben Két mód is kínálkozik rá: $ sudo apachectl -k restart vagy $ sudo /usr/sbin/apachectl restart Az eredmény ugyan az... sikeres restart! :)  ...