Az AJAX elavult, itt a Comet
Természetesen a cím hülyeség, mindazonáltal Alex Russell által közzétett új megközelítést tekintve itt egy új látásmód az AJAX alapon működő weblapokhoz, Comet néven. S hogy mi is ez? "Definíció szerint" az AJAX technikát alkalmazva a böngésző a szerver fele kéréseket intéz, melyekre aztán választ kap. A Comet ezt fordítja meg, s lehetővé teszi, hogy a szerver küldjön információt a kliens fele. Azért persze ennek ára van.
Az AJAX működését szemléltető diagramot megnézve látható, hogy a böngészőből indulnak az események, egy kérést küld a szerver felé, majd pedig választ kap onnan. Ezt a lehetőséget biztosítja az
A Comet elképzelés a háttérben szintén
A bevezetőben is említettem, hogy a Cometnek ára van: a kliensek folyamatos kapcsolatot tartanak fenn a szerverrel, azaz annyi webszerver (Apache) thread lesz, amennyi kliens látogat meg minket. Ez egy látogatottabb oldalnál elég szépen meg tudja fektetni a webszervert. Persze nem olyan nehéz megtalálni a megoldást valamilyen speciális szerver futtatásának személyében, melyek pont ilyen célokra készültek.
Alex Comet nevet felvető bejegyzéséből, illetve a hozzászólásokból persze ennél sokkal több is kiderül.
■ Az AJAX működését szemléltető diagramot megnézve látható, hogy a böngészőből indulnak az események, egy kérést küld a szerver felé, majd pedig választ kap onnan. Ezt a lehetőséget biztosítja az
XMLHTTPRequest
objektum, s kb. ezt a megoldást ismertük eddig. Illetve van egy olyan lehetőség is, amit kevésbé használunk, de már nagyon régóta rendelkezésünkre áll, ez pedig a keep alive, amikor a szerver egy kérésre a választ folyamatosan (inkrementálisan) küldi a böngésző felé.A Comet elképzelés a háttérben szintén
XMLHTTPRequest
objektumot használ, megnyit egy kapcsolatot, s vár a válaszra a szervertől. Az ilyen irányú megoldás előnye ott mutatkozik meg, ahol jellemzően a szerver oldalról jön több információ, s az sem gyakran, hanem esetileg. Jellemzően ilyen egy chat alkalmazás, vagy más PUSH megoldások. Ha nem ilyen alkalmazást írunk, korántsem kell azonban elfelejtenünk a "szokványos" AJAX megoldásokat.A bevezetőben is említettem, hogy a Cometnek ára van: a kliensek folyamatos kapcsolatot tartanak fenn a szerverrel, azaz annyi webszerver (Apache) thread lesz, amennyi kliens látogat meg minket. Ez egy látogatottabb oldalnál elég szépen meg tudja fektetni a webszervert. Persze nem olyan nehéz megtalálni a megoldást valamilyen speciális szerver futtatásának személyében, melyek pont ilyen célokra készültek.
Alex Comet nevet felvető bejegyzéséből, illetve a hozzászólásokból persze ennél sokkal több is kiderül.
Végre!
<Nincs cím>
Nem is igaz!
<Nincs cím>
Nem ez a kérdés
-boogie-
Példa
Tulajdonképpen nem küldök eof-ot? De ha jól értem nem erről szól a móka (ez elég triviális), hanem kiküldöd a különböző dolgaidat, eof-ot is küldesz, de a szerver és a böngésző nem dobja el a kapcsolatot, és várja a köv kérést, vagy ő küld ki újat adatot. Mondjuk ez utóbbit elég nehézkes lehet php-val megvalósítani...
semmi extra
Ennek nem sok köze van ehhez. ;) Itt a szerver nem zárja be a kapcsolatot.
A dolog amúgy tök egyszerű, van egy végetelen ciklusod (ami mondjuk adott szekvenciára kilép, meg figyeli, hogy a user ne csukta-e be a böngészőt). Ebben monjduk (egyszerű chat) egy fájlt figyelgetsz, és ha van benne új sor, akkor azt elküldöd a böngészőnek.
Ennek formája úgy nézhet ki, hogy egy JS kódrészletet küldesz neki. Ezt a böngésző megkapja, értelmezi, a JS kód meg olyan, hogy ezt az egy sort odacsapja egy textareahoz.
Egy dologra kell figyelni, hogy pl. IE is csak akkor áll neki értelmezi a kapott adatokat, ha az elér egy valamekkora mennyiséget. Erről terjengenek városi legendák (pl. 255 byte kell legyen minimum), de pontos adatot nem tudok. Ha ennél rövidebb a küldendő kód, akkor még hozzá kell csapni némi white space-t.
És persze szerveroldali output_bufferingre is figyelni kell, hogy nehogy az szivasson meg.
Felhő
Csak azt nem tudom
Végtelen ciklus megeszi a procidat, vagy ha sokat vársz egy iterációkor, akkor meg már mehetne sima ajax-szal. :)
Mondjuk vársz egy MySQL lock feloldásra, ennél jobb nem jut eszembe.
Ezek hekkelt megoldások, és a mostani tehnológiával azok is maradnak.
szerintem.
máshol nem?
Más programnyelvekben is egy végtelen ciklus megeszi a procit, ezért szoktak adott esetben valamennyi sleepet tenni bele.
Felhő