Zdravím.
Chtěl bych se zeptat, jak se dělá, že mohou lidé mezi sebou komunikovat, aniž by se musela znovu načítat stránka?
Vím, že to půjde přes AJAX, ale nemám ponětí, jak mám udělat, aby se zprávy zobrazily hned. Slyšel jsem něco o otevřeném spojení, ale nenapadá mě, jak by se to mohlo udělat.
Mohl by mi někdo poradit?
Standardní HTML ze své podstaty komunikuje pouze asynchronně formou klient-server. To znamená, že pro získání čehokoli (obsah chatu) je potřeba podat požadavek.
U webové aplikace se "online" komunikace simuluje formou opakovaného požadavku v určitém intervalu. To znamená, že třeba každou sekundu se formou AJAXu posílá požadavek na aktuální stav.
Dnes existuje nová funkcionalita v podobě WebSocket. Jedná se o novou funkci rodiny HTML5, která má za úkol právě tuto online komunikaci. Upozorňuji však, že se jedná o ranou funkcí, která není ještě schválená a nepodporuji ji všechny prohlížeče.
Nedávno jsem na permanentně otevřené spojení narazil. Dost to zatěžuje systémové zdroje serveru. Protokol HTTP se k tomuto účelu prostě nehodí, podobně jako se třeba nehodí k uploadu velkých souborů a přesto se k tomuto účelu používá.
Je lepší pro tento účel použít jiný kanál než HTTP, protože jsou zpravidla optimalizovány tak, aby démon na serveru byl co nejmenší a minimálně zatěžoval systém.
Také mě napadlo, že by se dal požadavek zasílat každou sekundu, ale přišlo mi to moc zátěžové, když by se každou sekundu zasílalo X (třeba desítky) dotazů. I když je pravda, že na určitých stránkách jsou stovky dotazů za sekundu, ovšem takové weby mají mnohem výkonnější servery.
Uvědom si, že Apache na serveru zabírá 10-25 MB RAM podle konfigurace. Každý HTTP dotaz spouští nové vlákno, takže jich může paralelně běžet maximálně pár set. Pokud zpracování jednoho dotazu trvá jednu sekundu, server jich obslouží za tu jednu sekundu několik set. Pokud bude zpracování dotazu trvat 10 ms, obslouží za sekundu několik desítek tisíc požadavků.
V čem je problém? Pokud je na serveru pomalá databáze, skript je v operační paměti příliš dlouhou dobu a kvůli němu stojí hromada dalších požadavků ve frontě. Pokud bys zpracování dotazu na svém serveru udělal jako rychlé, můžeš si dovolit i několik set chatujících klientů současně.
Ovšem nikdy nedocílíš takového výkonu, jaký máš na svém IRC serveru. IRC je totiž postavené na úplně jiném principu a tisíce klientů pro něj nejsou vůbec žádný problém.