Rezervační systém
Serverová aplikace

Obsah

Hlavní části

Zásadní částí serverové aplikace je modul pro uložení veškerých dat a manipulaci s nimi (tedy vlastní databázi i databázový stroj). Dále musí server zajišťovat komunikaci s připojenými klienty - přijímat požadavky, předávat je ke zpracování databázovému modulu a výsledky předávat zpět klientům. Server je určen k činnosti bez obsluhy, přesto obsahuje minimální správcovské rozhraní pro provedení zálohy apod. Strukturu znázorňuje obrázek na hlavní stránce.

Aplikace je přeložena jako jediný spustitelný modul brs_server.exe. Běhové knihovny jazyka mohou být v závislosti na nastavení projektu přilinkovány přímo do aplikace nebo mohou být sdíleny s dalšími aplikacemi. Toto nastavení má vliv na instalaci aplikace. Ostatní potřebné knihovny jsou pevnou součástí operačního systému.

Databázový modul ukládá data přímo do kontajnerů STL, tedy data jsou umístěna přímo v operační paměti počítače. Toto řešení dnes prakticky není omezeno z hlediska rozsahu dat (stovky tisíc či miliony autobusových spojů se snadno uloží do operační paměti i běžného 32-bitového stroje) a přirozeně vykazuje vysokou rychlost zpracování. V reálném systému by na druhé straně bylo nutné uvážit problematiku konzistence databáze při selhání hardwaru a nalézt odpovídající řešení.

Veškerá činnost databáze je zapouzdřena ve třídě CMemoryDb, v jejíž dokumentaci lze nalézt podrobnosti o zvolených kontajnerech a struktuře databáze. S okolím interaguje databáze pomocí uživatelského rozhraní CQuery a správcovského rozhraní CAdmin. Databáze je uzpůsobena pro současný přístup více klientů, konzistence dat je zajištěna pomocí víceúrovňových zámků typu více čtení - jeden zápis (k tomu podrobněji zde).

Spojení s klienty je zajištěno pomocí meziprocesové komunikace buď po síťovém protokolu TCP nebo předáváním zpráv operačního systému Windows mezi skrytými okny. Celkové uspořádání včetně schematických obrázků i podrobnosti o implementaci lze nalézt na zvláštní stránce. Moduly pro příjem spojení od klienta jsou pro vysokou průchodnost řešeny jako vícevláknové, více o jejich realizaci viz popis tříd CServerTcp a CServerMsg.

Jednoduchý správcovský terminál implementovaný ve třídě CServerApp slouží k příjmu řídicích příkazů a jejich zpracování. Jedná se hlavně o provedení zálohy databáze, pozastavení a opětovné spuštění komunikačního modulu a zobrazení stavu databáze. Konkrétní příkazy jsou popsány níže, problematice zálohování je věnována tato stránka. Server je proveden jako konzolová aplikace, správcovský terminál je tedy velmi jednoduchý, což je však u takových aplikací obvyklé a rozhodně není na závadu.

Při spuštění serveru bez parametrů se nahraje databáze, která odpovídá poslednímu platnému stavu při posledním ukončení aplikace. Podrobnosti jsou vysvětleny zde.

Alternativou je spuštění způsobem, kdy se provede obnova databáze do stavu v okamžiku dříve provedené zálohy. To se provede uvedením parametru - názvu souboru se zálohou, např. tedy

brs_server "C:\Users\Kilian\Dokumenty\BRS backups\brs_2013-12-16.backup"

Pokud soubor neexistuje, je porušen nebo nemá správný formát, je vytvořena prázdná databáze.

Konfigurace

Nastavení komunikačního modulu je řešeno pomocí externího konfiguračního souboru. Serverová aplikace předpokládá, že se příslušný soubor nalézá pod jménem brs_server.conf ve stejném adresáři jako vlastní aplikace. Jde o jednoduchý textový soubor, jeho formát bude zřejmý z následujícího příkladu

# Bus Reservation System
#
# konfigurace serverové aplikace
# přístupové body - tcp: IP adresa a port
#                 - msg: jméno okna
tcp=*:25100
tcp=10.1.56.127:25101
tcp=192.168.47.16:25102
msg=brs_server_msg_wnd
# 
# složka pro soubory databáze a žurnálu
datadir=

Konfigurují se pouze přístupové body pro jednotlivé druhy komunikace a adresář pro ukládání interních datových souborů. Řádky uvozené znakem # jsou komentáře a ignorují se. V příkladu se vytvoří celkem tři instance CServerTcp - první naslouchá na portu 25100 na všech IP adresách patřících počítači, druhá na IP adrese 10.1.56.127 a portu 25101, konečně třetí pak na IP adrese 192.168.47.16 a portu 25102. Nakonec se vytváří instance třídy CServerMsg s vnitřním skrytým oknem jména brs_server_msg_wnd. Všechny podoby podporovaných formátů a další podrobnosti jsou uvedeny v dokumentaci zmíněných tříd, diskuse o meziprocesové komunikaci na této stránce.

V případě komunikace pomocí TCP protokolu může být potřeba povolit odpovídající pravidla na firewallu počítače, případně i na dalších aktivních prvcích sítě.

Položka datadir určuje složku, kam se ukládají interní datové soubory - záloha databáze a žurnálovací soubor (více o tomto zde). Obecně lze doporučit uvedení absolutní cesty, neboť nemusí být zřejmé, s jakým aktuálním adresářem byla aplikace spuštěna. Prázdný řetězec odpovídá aktuálnímu adresáři.

Popis příkazů