neděle 15. dubna 2007

Komety přilétají

Pokud jste žili v domnění, že AJAX je technologickým Mount Everestem současných možností prohlížečů, pak vězte, že vývoj jde dál. Na tahu je technologie zvaná Comet (kometa) postavená na AJAXu a ždímajíc server do morku křemíku. Comet též nazývaný reverse AJAX a nebo server push nebude zřejmě tak revoluční jako AJAX, ale svoje místečko si určitě najde a to znamená další speciální požadavky ne webové servery.

Základní rozdíl mezi AJAXem a Comet je v správě HTTP připojení mezi klientem a serverem. Při AJAXu znamená každý asynchronní požadavek nové volání serveru. Comet oproti tomu využívá dříve otevřené HTTP připojení, které se neuzavírá. Díky tomu může server posílat data (server push) na klienta kdykoliv jsou k dispozici. Rozdíl je vidět na následujícím obrázku.

Ajax vs Comet

Pokud bychom vzali jako příklad chat aplikaci, znamená to v případě AJAXu, že klient v časových intervalech volá server pro nové zprávy. V případě Comet implementace se HTTP spojení s danými klienty neuzavírá a kdykoliv server dostane novou zprávu, může jí poslat na poslouchající klienty.

Comet nepřiplouvá do Ameriky jak bájný Kolumbus, místo toho staví na technologiích a postupech, které jsou současně dostupné. Comet nerovná se konkrétní implementace, stejně jako AJAX nerovná se konkrétní implementace. Comet je stejně jako AJAX koncept. Termín Comet poprvé použil a technologii pojmenoval Alex Russell v článku Comet: Low Latency Data for the Browser. Tři základní části konceptu komety jsou:

  • komunikační comet protokol
  • javascriptová knihovna implementující comet protokol
  • server implementující comet protokol

Protokol slouží k definici formátu komunikace mezi klientem a serverem a popisuje jednotlivé události, které mohou během interakce nastat a také formát jednotlivých zpráv/událostí. V současnosti existují proprietární implementace comet protokolu pro DWR a ActiveMQ o standardizaci se snaží specifikace Bayeux prokolu.

Bayeux prokol a jakýkoliv jiný comet protokol popisuje ve své podstatě messanging. Pokud jste znalí JMS, tak se jedná o klasický model subscriber/publisher. Kde serverový endpoint představuje topic, na který se klient přístupem registruje.

Specifikace comet protokolu je důležitá nejen z pohledu interoperability, ale především z pohledu klienta (browseru). Browsery totiž obvykle nedovolují více jak dvě připojení na jeden server. Z tohoto důvodu je Bayeux navržen tak, aby mohl být využit mezi různými knihovnami. Právě Bayeux je součástí kompletní comet implementace (protokol, serverová a klientská část - DOJO toolkit) zvané Cometd.

Comet koncept je velice zajímavým rozšířením, které umožňuje efektivnější tvorbu aplikací, které byly nuceny v časových intervalech kontaktovat server. Typicky se jedná o aplikace typu instant messengeru apod. Comet koncept se dá využít například pro řešení uživatelských jako souběžná modifikace dat.

Z pohledu Javy přenáší comet nový rozměr. Implementace na straně serveru musí být asynchronní a request response musí být oddělen. Asynchronní implementace endpointu není problém, problémem je servlet API, kde není oddělený request a response. Výsledkem je, že každý servletový kontejner si asynchronní servlet API řeší sám. Takže Tomcat 6.0 má své Advance IO, Grizzly (HTTP konektor GlassFische) má Asynchronous Request Processing (ARP) a WebLogic zase .

Další čtení o Comet