From the monthly archives:
January 2009
V loňském roce jsem začal v Geewě pracovat na projektu Geewa Messenger. Přestože jde o produkt, který už je možné si osahat v rámci betaverze komunitního herního serveru geewa.cz, jeho vývoj ještě zdaleka není ukončen, spíše se mi občas zdá, že je naopak na počátku, a kdo ví, jak bude Geewa Messenger vypadat po roce. Tuto sérii článků chci věnovat zajímavostem, postřehům, úvahám i plánům souvisejícím s tímto projektem. Počítám, že občas odběhnu od projektu samotného k obecnějším tématům a tipům, které se můžou hodit ostatním vývojářům.
Geewa Messenger je flashovou komponentou, která zdaleka není jen tím, co říká její název - instantním kecálkem. Z technologického hlediska je to srdce celé nové architektury komunitní aplikace Geewa verze 3. Když chce kterákoliv jiná komponenta v rámci stránky udělat něco, co souvisí s komunitními, tedy uživatelskými funkcemi Geewy (třeba poslat zprávu do chatové místnosti nebo někomu z kamarádů), použije k tomu Geewa Messenger. Ten má pro tento účel definováno javascriptové API, kterému věnujeme obzvlášť velkou pozornost. Narozdíl od minulé verze Geewy (2), což byla monolitní aplikace ve Flashi 7, tato architektura nám umožňuje kombinovat všechny možné klientské technologie - dnes to jsou Flash a AJAX, v budoucnu cokoliv dalšího, co si rozumí s JavaScriptem.
Tuto architekturu si vynutila heterogenost prostředí, ve kterém se s našimi produkty pohybujeme. Geewa není jeden konkrétní samostatný herní web. V různých podobách běží naše hry u partnerů v Česku i v zahraničí. Co partner, to jiné požadavky. K tomu přidejme hry v různých technologiích (třeba jen v různých verzích Flashe) - některé přímo od Geewy, jiné od vývojářů třetích stran; některé napojitelné na naši multiplayer platformu, jiné izolované, ovšem i u nich se například hodí uživatelům chatovat… Jiná architektura než tato komponentová logicky nepřicházela v úvahu. Zároveň se nám díky ní nabízejí úplně nové možnosti - například nabídnout Geewa Messenger (a s ním související komunitní funkce) jako samostatný produkt pro zapojení do libovolného webového projektu (nejen herního charakteru). O tom ale až někdy v budoucnu.
Geewa Messenger je flexová aplikace, používá Flex Framework verze 3.2, zatím klasicky integrovaný do samotného SWF, v dohledné době však plánujeme jeho osamostatnění do podoby RSL cachované ve Flash Playeru, tedy knihovny, která může být sdílena mnoha různými aplikacemi od různých autorů.
Pro komunikaci se serverem (který běží na .NETu) jsme zvolili klasické řešení na protokolu HTTP, tedy běžném webovém portu 80. Komunikační protokol je postaven na formátu JSON - v budoucnu plánujeme přejít na úspornější binární AMF, ovšem zatím se JSON jeví jako vyhovující a výhodný např. z důvodu ladění nebo podpory zařízení, kde není Flash Player a s nimiž také experimentujeme (iPhone, televizní set top boxy, apod.). Pro multiplayer hry by se pochopitelně nabízelo socketové řešení komunikace (s využitím Flash Media Serveru či podobného). Vzhledem k omezení z důvodu firewallů v různých organizacích by socketová komunikace vždy musela být pouze jako alternativa. Původně jsme ji měli zahrnutou v dlouhodobých plánech, ovšem priorita tohoto cíle poklesla poté, co jsme koncem loňského roku úspěšně otestovali vylepšení HTTP komunikace - tzv. long polling. Toto řešení spočívá v tom, že místo pravidelného dotazování serveru (řádově v intervalu 1-2 sekundy) klient odešle dotaz na server a toto HTTP spojení zůstává otevřeno až do okamžiku, kdy se na serveru vyskytne nějaká událost, kterou je potřeba doručit klientovi. Teprve pak server uzavře HTTP dotaz odesláním odpovědi, načež klient okamžitě otevře další HTTP spojení. Tímto řešením jsme dosáhli takové subjektivní plynulosti komunikace a zároveň takového odlehčení serverů i datového toku, že otázka plnohodnotného socketového řešení byla odsunuta na neurčito. Ostatně jedná se o řešení dnes běžné u velkých webových RIA jako je Facebook nebo aplikace Googlu. Jako vhodný doplněk HTTP komunikace se nám však jeví peer-to-peer spojení na protokolu RTMFP, což je novinka ve Flash Playeru 10. Základem Geewy bude vždy přenos dat přes server, ovšem určitý typ dat bude výhodné přenášet přímo mezi klienty. V současnosti jsme ve fázi experimentování se službou Stratus, kterou zřídilo Adobe pro rozjezd RTMFP.
Příště se zaměřím na javascriptové API Geewa Messengeru a zobecněné postřehy a zkušenosti s External Interface.
