Láká vás perspektiva využití Flashe jako platformy pro prezentační vrstvu aplikací? Zde se dozvíte, co je to Flash Remoting, jak začlenit flashové aplikace do světa webových služeb a jak k tomu využít populární platformu PHP.

Tématem tohoto článku je loňská novinka zahrnutá do technologie Macromedia Flash, kterou bychom mohli označit jako třetí generaci nástrojů pro komunikaci klient/server. První generací (Flash 4) byla funkce loadVariables, která umožnila výměnu dat mezi klientem a serverem ve formátu url-encoded, to znamená ve tvaru proměnná=hodnota. Druhou generací (Flash 5) byla třída XML, umožňující mnohem pohodlnější přenos strukturovaných dat. Flash 6 (MX) přišel s generací třetí, inspirovanou trendem takzvaných webových služeb. Základní myšlenka je jednoduchá. Programátor přeci nechce data neustále speciálně připravovat pro přenos (do formátu XML nebo url-encoded), pak řešit problém vlastního přenosu a na druhé straně komunikace data opět mechanicky převádět (např. parsováním XML) do interních datových struktur daného jazyka. Programátor chce jednoduše jen zavolat nějakou funkci, předat jí parametry a čekat na výsledek. Úplně stejně, jako by se jednalo o funkci v rámci lokální aplikace, nikoliv o funkci na vzdáleném stroji.

Tato technologie dostala název Flash Remoting. Zahrnuje nově vytvořený komunikační protokol AMF, rozšíření jazyka ActionScript, software pro stranu serveru a několik doplňkových nástrojů pro tvorbu a ladění aplikací. Teprve díky těmto schopnostem začíná řada vývojářů pohlížet na Flash jako na vážnou alternativu při volbě platformy pro uživatelské rozhraní, čili prezentační vrstvu aplikací. V poslední době se Flash Remoting dostává do popředí zájmu také díky tomu, že vznikl open-source projekt nabízející řešení serverové části této technologie v prostředí PHP.

Na tomto místě budu předpokládat, že vám pojem webové služby (web services) není zcela neznámý. Připomeňme, že se stále zabýváme komunikací založenou na protokolu HTTP, to znamená komunikací probíhající podle scénáře „požadavek klienta –> odpověď serveru“. Necháváme stranou komunikaci obousměrnou (iniciovanou klientem nebo serverem), kterou poprvé nabídl Flash 5 (XML Socket) a podstatně usnadnil Flash 6 (protokol RTMP a nový produkt Flash Communication Server). Pro úplnost si ale ukažme, jak si Macromedia představuje svět, který se se svými produkty snaží vytvářet či podporovat a který nazývá „Rich Internet Applications“:

Rich Internet Applications

Pod pojmem „aplikační server“ si představte libovolné programovací prostředí, ve kterém vytváříte aplikace na straně serveru, například PHP, J2EE, .NET, ColdFusion a další. (Pro zjednodušení schématu považujme za součást aplikačního serveru i WWW server.)

„Komunikačním serverem“ rozumíme server zajišťující takový přísun dat z/do flashové aplikace, pro který není vhodný protokol HTTP vzhledem ke svému omezení na komunikační model „dotaz –> odpověď“. Komunikační server tedy najde uplatnění v aplikacích využívajících streamování zvuku a videa, chat, hry a podobně. V současnosti si sem dosaďte jediný produkt – Macromedia Flash Communication Server MX. Není mi známo, že by dnes existoval konkurenční produkt, který by pracoval s protokolem RTMP (Real-time Messaging Protocol).

Uvedené schéma především zodpovídá otázku, co to je Flash Remoting- tuto technologii tvoří to, co je vyznačeno červeně.

V první řadě to je speciální protokol AMF (Action Message Format), při jehož návrhu se Macromedia inspirovala protokolem SOAP (Simple Object Access Protocol), který vytvořilo konsorcium W3C jako základ pro webové služby. SOAP je jazyk, kterým se jeden aplikační server ptá druhého, například „Jaká je právě teplota ve Stockholmu?“ a získá odpověď „11 stupňů Celsia“ (nebo pole hodnot či jakoukoliv složitější datovou strukturu). Protokol AMF je narozdíl od obecného SOAPu optimalizován pro objektový model ActionScriptu a je to formát binární. Jeho implementace ve Flash Playeru tedy může být velmi úsporná, stejně jako datový přenos mezi klientem a serverem.

A pak tu máme ony červené krabičky, sídlící jak ve Flash Playeru, tak i uvnitř aplikačního serveru (případně i komunikačního serveru). Jejich úkolem je konverze datových typů mezi ActionScriptem a příslušným jazykem aplikačního serveru a dále takzvaná serializace a deserializace, čili převod složitých interních datových struktur z/do formátu určeného pro přenos dat.

Je zřejmé, že tyto komponenty musí být součástí klientské i serverové aplikace. Komponenty pro stranu klienta, tj. Flash, tvoří jednak trvalé rozšíření ActionScriptu (například třída NetConnection) a dále knihovny (externí zdrojové soubory ActionScriptu), které je nutné připojit ke každé aplikaci, která chce využívat Flash Remoting. Tyto komponenty spolu s dokumentací, která se po nainstalování integruje s vývojovým prostředím Flash MX, lze zdarma získat na adrese http://www.macromedia.com/software/flashremoting/downloads/components/.

Komponenty pro stranu serveru však již zdarma nejsou. Macromedia je nabízí pro prostředí J2EE a .NET a také jako součást svých aplikačních serverů JRun a ColdFusion. Naštěstí se na tomto poli začínají rozvíjet i open-source aktivity. První přišlo na řadu populární PHP, dále se chystá Perl, Python či J2EE (zde již půjde o přímou konkurenci Macromedii, bude-li projekt úspěšně dokončen). Příště se na praktickém příkladu zaměříme na PHP.

Teď se ale ještě vraťme k webovým službám. Jak vyplývá z výše uvedeného, flashová aplikace (tedy soubor SWF běžící ve Flash Playeru) se nemůže přímo napojit na vzdálenou webovou službu, protože rozumí pouze svému protokolu AMF, nikoliv všeobecně používanému SOAPu. To však není žádný problém a jak znázorňuje schéma, napojení na webové služby probíhá přes bránu, která je součástí serverové strany technologie Flash Remoting. Důležité je, že při komunikaci s různými webovými službami není nutné nic měnit na straně aplikačního serveru, respektive serverová aplikace ani nemusí existovat.

Jak už bylo řečeno v úvodu, programátorovi ActionScriptu se komunikace se serverem jeví jako běžné volání metod nějakých objektů. Tyto objekty v tomto případě nazýváme služby. Aplikace nejprve naváže spojení s takzvanou „bránou“ (vstupním bodem do aplikačního serveru) a potom si může vyžádat jednotlivé služby. Může se jednat o webové služby (volané z cizího serveru) nebo služby, které sami vytvoříme pro potřeby naší aplikace v jazyce aplikačního serveru. Webové a vlastní služby dohromady nazývejme vzdálené služby. Serverová část technologie Flash Remoting se postará buď o přesměrování požadavku na příslušnou webovou službu nebo o mapování služeb na interní objekty naší serverové aplikace. Každý takový objekt poskytuje určité metody a tyto metody můžeme volat přímo z ActionScriptu, kde se nám jeví jako metody objektu reprezentujícího danou službu.

Součástí Flash Remoting je i několik užitečných pomůcek, které využijeme při tvorbě a ladění aplikací. Jednou z nich je Service Browser, který nám přehledně zobrazí brány aplikačních serverů, služby a jejich metody:

Service Browser

Jak vidíte ze snímku obrazovky, metody vzdálených služeb si můžeme také nechat zobrazit v panelu Actions (a Reference) a počítá s nimi i editor ActionScriptu při „napovídání“ během psaní kódu. Pojetí vzdálených služeb stejným způsobem, jako by šlo o objekty ActionScriptu, je skutečně dotaženo do konce.

Dalším velmi užitečným nástrojem je NetConnection Debugger, díky kterému můžeme přehledně vystopovat, co přesně se děje při komunikaci mezi klientem a serverem:

NetConnection Debugger

Věřím, že teď už nikdo nepochybuje, že Flash Remoting může u větších projektů přinést radikální zefektivnění práce v porovnání s komunikací přes XML, o funkci loadVariables už ani nemluvě. Ve schématu architektury „rich internet applications“ jsou však tyto první dvě generace komunikačních nástrojů zakresleny (oranžovou barvou) – lze je samozřejmě nadále využívat jako doplňkové nástroje. Povšimněte si ale, že mezi aplikačním serverem a komunikačním serverem (Flash Communication Server) toto oranžové spojení chybí. Je to tak, zde již Macromedia počítá s protokolem AMF jako s jedinou možností, jak tyto servery propojit. Potřebujete-li toto propojení realizovat a zároveň nemáte k dispozici Flash Remoting, je však většinou možné architekturu aplikace přepracovat tak, aby komunikace vždy probíhala přes klientskou aplikaci (SWF). To je však již mimo téma tohoto článku, komunikační server už provždy opustíme a nadále se soustředíme výhradně na Flash Remoting. V příštím článku si ukážeme, jak implemetovat Flash Remoting v prostředí PHP.

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