Autor Zpráva
Prokop
Profil *
Zdravím,
chtěl bych se zeptat, vůbec nemám tušení, jakým způsobem je řešeno realtime načítání dat z databáze?
Kdybych chtěl na své stránce po přijetí zprávy vložené do db, aby se ihned zobrazila.

Kupříkladu zprávy na fb, odešle zprávu a ihned se zobrazí adresátovi.

Je to řešeno JavaScriptem? Ajaxem? Flashem?
Jak moc je to náročné na zpracování? Neodesílá to obrovské množství požadavků, takže by se tím rapidně snížila rychlost vykreslování dalšího PHP?

Díky
Prokop
Joker
Profil
Prokop:
Je to řešeno JavaScriptem? Ajaxem? Flashem?
Obvykle první dvě, protože AJAX je zároveň Javascript.

Případně se někdy používá technika zvaná „long polling“ (v kombinaci s AJAXem a celé to je Javascript).

Dodatek:
Odesílá to samozřejmě větší množství požadavků (long polling méně, ale zase vytváří dlouho trvající požadavky, což může být problém, pokud server má omezený počet současných požadavků), takže pokud taková stránka bude mít zároveň spoustu uživatelů, musí na to server být dimenzovaný.
Samozřejmě je to také otázka vhodného vyvážení intervalu mezi požadavky (kratší interval znamená v průměru rychlejší zobrazení nové zprávy uživateli, ale zase vyšší zátěž na server, delší interval naopak).
whoami
Profil
Nejjednodušší na vyzkoušení bude použít jQuery. Na serveru bude script, například ajax.php, který bude dostávat parametr, například ?last=XYZ, a pomocí něho si z db stáhne všechny řádky s id větším než je $_GET['last'] a pomocí json_encode($rows); je vypíše..

V prohlížeči potom bude script který s pomocí knihovny http://api.jquery.com/jQuery.ajax/ stáhne všechny nové řádky a pomocí např.: $('.chat').append(html); je přidá do stránky.. + poznačí si id toho posledního pomocí kterého nastaví parametr last v příští loop..

Co se týče facebooku tam je chat v XMPP a mají něaký demon který se stará o komunikaci s ajaxem..
Joker
Profil
whoami:
Nejednodužší na vyzkoušení bude použít jQuery.
Pro tvorbu nějakého jednoduchého ukázkového příkladu by naopak bylo nejjednodušší se obejít bez jQuery.
Když si zkopíruje nějakou ukázkovou AJAX funkci (například), bude délka kódu prakticky stejná (mínus jQuery) a snáz pochopí, jak to vlastně funguje.

Jinak ještě bych upřesnil svůj předchozí příspěvek, ta informace, že long polling generuje méně požadavků než časované dotazy samozřejmě neplatí obecně. Pokud long polling nebude mít výrazně dělší životnost požadavku než byl interval u časovaných dotazů anebo nové zprávy přibývají velmi rychlým tempem, bude long polling naopak generovat víc požadavků.
Prokop
Profil *
Díky za vysvětlení, pánové.

Ještě poslední dotaz: v JavaScriptu, případně ajaxu neumím, existuje nějaké vhodné řešení (framework apod.), které se dá lehce využít? Například pro Nette?
Chamurappi
Profil
Reaguji na Prokopa:
Nauč se JavaScript, ten se dá lehce použít, není v něm takový chaos, aby potřeboval framework. Na AJAX stačí jedna triviální funkce + pochopit, že je asynchronní. Frameworky existují, ale většinou jsou plné neužitečného balastu a pak je musíš vláčet a aktualizovat jako kouli na noze, protože cílové prostředí (tedy prohlížeče) se plynule mění.
Prokop
Profil *
Ok, díky moc za cenné rady. :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: