Autor Zpráva
lorin
Profil
Dobrý den, dnes mám takovou obecnější otázku. Chtěl bych udělat web podporující sdílení canvasu mezi více uživateli. V podstatě jde o online "malovátko", jen s tím rozdílem, že jej mohou editovat všichni připojení uživatelé.

Pro řešení tohoto problému mě napadlo využít ajax pollingu na server. Vždy po nějaké uživatelské akci by se na server přenesla data. Zde by byla zpracována a uložena do databáze.

Po několika vteřinách by se provedl dotaz na nově přidaná data.

Našel jsem i jiné postupy - použití node.js, dlouhodobého ajax pollingu a podobně. Mým cílem nicméně je, aby aplikace byla co nejjednodušší na nasazení a měla co nejširší možnost nasazení.

Teď k mé otázce. Je tento postup použitelný? Nebudu (při 100 připojených uživatelech) narážet na pomalý server? Jak se podobné problémy řeší? Mám k dispozici jen PHP, MySQL, JS.
YOYO
Profil
Myslím, že při použití php narazíš na pomalý server mnohem, mnohem dřív, než při 100 uživatelích, pokud tedy chceš aby to mělo real-time odezvu.

Zkoušel sem si udělat podobné malovátko s pomocí node.js a socket.io a jelo to dost svižně (sice jen při 4 uživatelích, ale napsal sem to narychlo dost prasácky bez jakékoliv optimalizace, problem s výkonem sem měl spíš u klient-side než na serveru... a teď jsi mě trochu inspiroval, že bych se možná mohl dokopat k tomu to dodělat/předělat)

Co přesně myslíš tou snadností nasazení? Bys chtěl distribuovat i serverovou část? Myslím, že by nebyl problém poskytnout ke stažení server-side balíček i s node.js interpretem, osobní použití by pak bylo triviální (a multiplatformní). Ale ne nasazení na webhostinzích jestli si myslel toto, jelikož node.js hostingů je pár.

PHP vážně není stavěné pro takovéto real-time aplikace. Možná tak při použití HipHop php a mysql v RAM, ale to by zas dost problematizovalo nasazení.
lorin
Profil
Představu jsem měl asi takovou, že by se data o uživatelských akcích na serveru ukládala do MySQL tabulky. Dočetl jsem se, že MySQL podporuje ukládání dat do RAM paměti. IO operace jsou pak mnohem rychlejší než při zápisu na disk. Aktualizace malovátka (dotaz na server s požadavkem o předání všech akcí od poslední žádosti) by proběhla každých 15-30 vteřin. Tím by se mělo zamezit zahlcení serveru. Pro mé využití by to mělo být postačující.

Snadností nasazení jsem myslel to, že ve finále hodlám celé malovátko zveřejnit a je nutné, aby jej bylo možné nasadit na co nejširší množství serverů s co nejminimálnější námahou. A protože PHP, MySQL a Apache běží na i na free hostinzích, chtěl jsem to zkusit touto cestou. Samozřejmě jsem narazil na node.js, websockets a jim podobné. Ty mají jednu velkou nevýhodu, jsou málo rozšířené.
YOYO
Profil
Node.js je sice málo rozšířený nicméně pro toto použití mnohem vhodnější, tím spíš by bylo fajn napomoci jeho rozšíření tvorbou úžasných node.js aplikací ;)

15 vteřinové intervaly by neměly server zahltit,.. ale user experience bude podle mne nanic, nebo to aspoň nebude plnit účel který sem si myslel, že chceš aby to plnilo. Ale kdo ví co to vlastně chceš vytvořit. Tu nutnost globálního nasazení stále moc nechápu.

Každopádně jsem dost zvědavý na tvé konečné řešení.
final
Profil
lorin:
Ahoj, ak to má byť online "malovátko" zdielané viacerými užívateľmi, nevidím dôvod prečo by tam mal byť update 15 sekúnd, vkľude môže byť update 50 fps(50x za sekundu), ale to zase nie je potrebné na takú aplikáciu. A teda odporúčam node.js napr. v spojení so socket.io, zatiaľ sa s tým bavím asi tak mesiac, takže ešte neviem ako ľahko(ťažko) by sa dal node.js nainštalovať na vlastný VPS..(ale free webhosting pre testy stačí).

Prvý tutorial, ktorý som si stiahol bol tento tento(chcel som vedieť, či vôbec dokážem všetko nainštalovať a rozchodiť to) a s toho sa už môžeš inšpirovať ďalej ;)
lorin
Profil
YOYO:
15 vteřinové intervaly by neměly server zahltit,.. ale user experience bude podle mne nanic
Právě to je největší problém mého řešení. Dlouhá odezva. Možná to budu řešit jako stand-alone aplikaci.

final:
nevidím dôvod prečo by tam mal byť update 15 sekúnd, vkľude môže byť update 50 fps(50x za sekundu
Těch patnáct sekund je ochrana proti zahlcení serveru. Apache kontinuální spojení moc nezvládá. Lepší je použít krátkodobé dotazy.

final:
Co jsem pochopil, pro rozjetí Node.js se hodí VPS. Na klasický hosting ho nenacpu. Nebo se mýlím?
final
Profil
lorin:
Těch patnáct sekund je ochrana proti zahlcení serveru. Apache kontinuální spojení moc nezvládá. Lepší je použít krátkodobé dotazy.
pokiaľ to spravíš cez node.js tak nič také nemusíš riešiť..pozri sa na ten link ako je to tam spravené..keď už niečo také chceš spraviť tak nech je to real time..(pokiaľ si teda vybereš node)

Co jsem pochopil, pro rozjetí Node.js se hodí VPS. Na klasický hosting ho nenacpu. Nebo se mýlím?
áno, treba mať vlastný VPS, alebo využiť free hosting
lorin
Profil
final:
alebo využiť free hosting
To moc nechápu. U free hostingů se přeci k serveru jako takovému nedostanu. Nemůžu tam node.js nainstalovat ne?
final
Profil
lorin:
myslel som free node.js webhosting :)
vskiper
Profil *
Sdilený canvas je jedna z demo aplikací Firebase (možna AngularFire nejsem si jistej). O server se nestaráš jen si založíš konto na Firebase a použijejš jejich API. Pixely, které kreslíš se posílají jako JSON na Firebasi a ta se zároveň i stará o to, aby se nová data distribuovala/synchronizovala se všemi klienty, ktreré jsou k tomu canvasu "přehlášeny".
Nechci se blamovat, ale je to nějakych 50 řádků kódu.
neviemheslo
Profil *
50 riadkov to môže byť, ale ide o to koľko stoviek (tisíc ) riadkov má ten firebase..

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0