V šerém dávnověku byla Síť plná velkých dinosaurů odborných vědeckých prací, provázaných mezi sebou hypertextovými odkazy, sem tam se jako malý, rychlý pterodaktyl prohnal mail či prošuměl talk. Nic pro normální lidi, také se Internetu neříkalo Internet ale Arpanet. Jak šel čas, původně akademická síť se rozšířila mezi obyčejné lidi, ale pořád se skládala jen ze statických stránek. Moderní net se zrodil ve chvíli, kdy vznikla první interaktivní webaplikace…

Postupem času se na netu rozlišily dva hlavní proudy, jak vytvářet takové aplikace. Jsou označovány zkratkami CGI a API. CGI znamená Common Gateway Interface, API zas Application Programming Interfaces. Základní rozdíl mezi těmito dvěma technologiemi je ten, že CGI (či vylepšené FastCGI) je vykonáváno přímo operačním systémem a je nezávislé na webovském serveru, běží jako samostatný proces. Oproti tomu API (nejznámější příklad API technologie je asi PHP) je neoddělitelně svázáno s webovským serverem a je tímto serverem také vykonáváno. Pro bližší popis a podrobnou technickou definici těchto standardů musím odkázat zájemce na zdroje z internetu, nejsou totiž hlavním obsahem článku.

Jak už jsem dříve předeslal, skripty CGI běží jako izolovaný procesy. Jsou nezávislé na platformě, použitém webovském serveru nebo programovacím jazyku. Prakticky se dá říci, že v dnešní době lze napsat CGI skript v každém z běžných programovacích jazyků, byť s různou efektivitou (jako CGI se dá pouštět i PHP). CGI má i nedostatky, kterými jsou především malá efektivita a vysoké nároky na systémové zdroje, což je způsobeno tím, že CGI skript se nově startuje pro obsluhu každého příchozího požadavku a po jeho vyřízení se ihned ukončí. To je obzvláště nevýhodné, pokud se v rámci skriptu provádí navázaní spojení s databází. Další nevýhodou je, že CGI dokáže číst pouze ze standardního vstupu a vypisovat pouze na standardní výstup.

Eliminací těchto nevýhod je vylepšené CGI, FastCGI. Roku 1996 byla vypuštěna do světa první verze tohoto modulu programátory firmy Open Market. Podstatou FastCGI je práce v cyklech, kdy skript po startu provede inicializaci, naváže spojení s databází a zůstává aktivní v paměti OS, ale prakticky nijak OS nezatěžuje, pouze čeká na předání požadavků od webovského serveru. Po příchodu požadavků je vyřídí, odešle zpět a dále čeká. Práci skriptů a jejich komunikaci s webovským serverem řídí právě modul FastCGI.

Dá se říci, že FastCGI zachovává všechny výhody CGI a odstraňuje všechny nedostatky (no dobře, když ne všechny, tak valnou většinu). A má i jiné výhody, například vůbec není podmínkou, aby FastCGI skripty běžely přímo na webovském serveru, naopak se s výhodou využívá rozdělení zátěže mezi webovský, aplikační a databázový stroj. Také je velice snadné provést migraci z CGI na FastCGI, zůstává zachována jazyková a platformová nezávislost.

V této krátké sérii článků se budeme věnovat psaní FastCGI aplikací v Perlu nad databází PostgreSQL na operačním systému Linux s webovským serverem Apache. V následujících článcích se blíže podíváme, jak zefektivnit tvorbu aplikací pomocí technologie Masser a databázovou podporou modulem DeltaX::Database.

Prvním krokem pro tvorbu webovských aplikací je instalace všech potřebných programů a nástrojů. Linux je možno zdarma stáhnout například na adrese www.redhat.com, součástí distribuce je též webovský server Apache, stejně jako Perl a databáze PostgreSQL. Zároveň je potřeba nainstalovat podporu Apache pro Perl (apache-devel*.rpm jsou hlavičkové soubory a knihovny pro vývoj a kompilaci programů a knihoven pro apache) a podporu Perlu pro databáze (moduly DBD a DBI).

Dále je nutné stáhnout si a nainstalovat z adresy www.fastcgi.com modul mod_fastcgi. Kompilace je poměrně jednoduchá a bezproblémová. Při volbě kompilace jako DSO (což lze doporučit), je možné zvolit také úpravu konf. souboru Apache, lepší je ale ruční editace. Důležité je doplnit řádek LoadModule fastcgi_module modules/mod_fastcgi.so, doplnit Options ExecCGI pro adresář, odkud hodláte FastCGI skripty spouštět, a direktivu AddHandler fastcgi-script .fcgi .fcg .fpl (podle vámi zvolených přípon, může být nastaveno i pro celý server).

Kompilace pro Apache 2+ vyžaduje zdrojové kódy Apache a provedení configure před samotnou kompilací FastCGI modulu, přičemž toto configure musí být spuštěno se stejnými parametry jako kompilace Apache, který používáte (například pro RedHat to znamená buď použít jejich httpd-src balík, nebo si zkompilovat Apache od začátku). V opačném případě se vám může stát, že Apache s modulem FastCGI prostě nespustíte.

Běh FastCGI s Apache je možný dvěma způsoby, dynamicky nebo staticky. Dynamický způsob spočívá v tom, že se podle zátěže zvyšuje počet naráz běžících skriptů až do počtu uvedeného v konfiguraci (MaxClassProcesses). Tento přístup je ale nevýhodný, protože při rychle narůstajícím zatížení systému rapidně stoupá počet startujících se skriptů, což může stroj úplně zahltit. Mnohem výhodnější je druhý přístup, statický, který spočívá v přesném vymezení počtu a typu běžících procesů, což se provádí následující klauzulí v konfiguraci Apache (parametr processes znamená počet naráz běžících scriptů):

FastCgiServer /home/masser/public_html/cgi/masser.fcgi -processes 1

Tímto jsme skončili s konfigurací všeho potřebného a můžeme přistoupit k samotnému programování webovských aplikací v Perlu. Zájemce o podrobnou konfiguraci FastCGI odkazuji na on-line dokumentaci, ačkoli se jí budeme ještě zabývat v dalších článcích. (Na webu FastCGI lze nalézt také popis a zdrojové kódy pro instalaci této technologie na platformě Windows, a to jak pro Apache, tak i pro IIS.)

Stručný úvod do Perlu

Perl je univerzálně použitelný programovací jazyk, který se největší obliby a rozšíření dočkal především na Linuxové platformě. Jestliže máte nainstalovaný Perl na svém počítači, příkazem perl -d -e 42 si spustíte perlovský debugger. (Koho zajímá, proč zrovna „42“, toho si dovoluji odkázat na knihu Douglas Adamse Stopařův průvodce po Galaxii). Na obrazovce se vám po zdárném spuštění debuggeru objeví následující text:

Loading DB routines from
perl5db.pl version 1.19
Editor support available.
Enter h or `h h‘ for help, or `man perldebug‘ for more help.
main::(-e:1): 42
DB<1>

Nyní si můžete vyzkoušet některé základní funkce v Perlu. Příkaz p vypíše výsledek operace v daném řádku, p 'abc' vytiskne na další řádek řetězec abc. Řádky ukončuje znak „;“.

DB<2> p 1+1
2

Perl má tři základní typy proměnných, skalár, pole a asociované pole (dále jen hash). Všechny proměnné v Perlu jsou netypové, i pole nebo hash mohou obsahovat prvky různého typu. Deklarace proměnné se provádí pomocí klíčového slova my:

my $promenna;
my @pole;
my %hash;

Přístup k jednotlivým prvkům pole je následující:

$pole[0] = ‚nultý prvek‘;
$pole[1] = 1;

Pole začíná nultým prvkem, délka pole je $#pole (pole obsahující pouze nultý prvek má délku 0, prázdné pole má délku -1). Přístup k jednotlivým prvkům hashe je následující:

$hash{‚prvek a‘} = ‚A‘;
$hash{1} = 1;

Seznam klíčů hashe získáte pomocí:

my @klice = keys %hash;

Zápis podmínky:

if ($promenna > 1) {
… nějaký kód …
} elsif ($promenna > 2) {
… nějaký kód …
} else {
… nějaký kód …
}

Cyklus for:

for (my $i = 0; $i <= 10; $i ++) {
… nějaký kód …
}

Cyklus while:

while ($promenna <= 10) {
… nějaký kód …
$promenna ++;
}

Přechod na další cyklus bez vykonání stávajícího se provádí pomocí next a předčasné ukončení cyklu pomocí last. Procedura má stávající zápis:

sub moje_prvni_procedura {
my ($vstup1, $vstup2) = @_;
my $vystup1 = $vstup1-$vstup2;
my $vystup2 = $vstup1/$vstup2;
return ($vystup1, $vystup2);
}

Následné volání procedury je potom toto (uvedená procedura vrátí rozdíl a podíl vstupních hodnot, $vysledek1 tedy bude 4 a $vysledek2 bude 3):

my ($vstup1, $vstup2) = (6, 2);
my ($vysledek1, $vysledek2) = moje_prvni_procedura($vstup1, $vstup2);

Kompletní perlovskou dokumentaci naleznete v manuálu (man perl), kde se také dozvíte, co přesně zkratka Perl znamená. Popis perlovské syntaxe získáte pomocí man perlsyn a perlovské funkce logicky popisuje man perlfunc. Doporučuji vám také ke shlédnutí vynikající příručkou pro začátečníky Naučte se Perl.

V příštím článku se zaměříme na to, jak má vypadat FCGI skript v Perlu a jaké jsou základní komponenty Perlu pro práci s HTML.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět