Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde
Avatar
katrincsak
Člen
Avatar
katrincsak:3. května 7:16

Zdravím,

dostal jsem v práci ne úplně lehký úkol a rád bych to vyřešil co nejlépe jak dovedu v rámci možností. Jedna z věcí je to, že potřebuji vytvořit příspěvek a odeslat. Odeslaný příspěvek může být odeslán jednotlivci, nebo i spoustě lidem podle dalších nastavení viditelnosti atp. V praxi se jedná o příspěvky jako má např. FB. Potřebuji najít ideální řešení/technologii, která dokáže u příjemců detekovat zda náhodou nepřišel nový příspěvek.

V rámci mích znalostí mě napadá, že bych mohl provádět ajaxový dotaz v určitém intervalu a dotazovat se na něco nového. Pravděpodobně budu mít tabulku s událostmi a statusem zda byla zobrazena.

Díval jsem se na WebSocket, ale ten asi nepřipadá v úvahu z důvodu zásahu na server, nebo aspoň co jsem četl. A další asynchronní řešení které jsem našel v rámci js/javascriptu, tak mi připadá že bych se stejně musel stále dotazovat zda uživatel nemá novou událost na straně databáze.

Zajímají mě spíše vaše postupy, nebo odkazy na nějaké informace kde bych dostal odpověď. Ideálně teda v češtině, ale není to úplně podmínkou.

Děkuji za rady.

 
Odpovědět 3. května 7:16
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3. května 7:41

Principialne to funguje jako chat. V intervalu nactes nove prispevky. Ve tvem pripade jen cislo, pocet neprectenych.
httprequest -> php -> sql -> text/html/js
Cili, tak ci tak nejspis budes muset doprogramovat cele chatovaci rozhrani.
S temi sockety, to je zajimava myslenka, to by resilo rychlost a usporu dat. Musel bys s kazdym uzivatelem vytvorit spojeni a udrzovat, dokud se neodhlasi. Takovy socket server se da resit i v php. Musel bys mu ale nastavit time na -1, nekonecno pres ini_set. Bezne php scripty maji limitovany cas jejich spusteni.

 
Nahoru Odpovědět 3. května 7:41
Avatar
katrincsak
Člen
Avatar
Odpovídá na Peter Mlich
katrincsak:3. května 8:15

Chat ten mě čeká možná také a trochu jsem si uvědomil, že jsem sdělení výše trochu pomíchal. Jedna věc jsou notifikace a druhá věc jsou reakce na příspěvek kde to samozřejmě bude fungovat jak říkáš podobně/stejně jako je chat.

 
Nahoru Odpovědět 3. května 8:15
Avatar
Petr Čech
Redaktor
Avatar
Petr Čech:4. května 11:53

Pollování je špatně, při dostatečném množství klientů ti to shodí jakýkoli rozumný server. Mělo by se to řešit websocketem. Php ale není úplně ideální pro udržování neustálého spojení (jde to, ale je to takové "meh").
Místo toho se potom používá třeba node.js aplikace, to je na tohle technologie jako dělaná.

Nahoru Odpovědět 4. května 11:53
the cake is a lie
Avatar
katrincsak
Člen
Avatar
Odpovídá na Petr Čech
katrincsak:4. května 12:47

Tím pollováním předpokládám narážíš hlavně na omezený počet spojení ? Cílem určitě je, že to bude využívat několik tisíc uživatelů. Bohužel ale mám dost omezené možnosti, jsem rád že jsem si udělal MVC na ajaxovém volání, které mi díky struktuře šetří mnoho času a přemýšlení nad logikou a čistotou.

Co se týká notifikací, tak tam by dotaz probíhal 1x za 30s až za 1 minutu, což mi možná ještě připadá v pohodě. Co se týká příspěvků/komen­tářů, tak bych detekci mohl sjednotit s notifikacemi. V tomto případě bych musel snížit opakovaný dotaz na 30s. A chat se ještě uvidí, protože je dost možné, že by se použilo řešení nějaké třetí strany.

 
Nahoru Odpovědět 4. května 12:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. května 13:09

Php web-socket server mam. 13k kodu. A aby to melo nejakou funkcionalitu, tak 20k. PHP je ale pomale proti C, takze by bylo lepsi nainstalovat uz hotove reseni, do linuxu, treba. Podobne pro chat uz primo hotovy RTC server. C a PHP je dost rozdil. Nicmene, u tech notifikaci predpokladam max 30 lidi online. Ono se to da optimalizovat, ze zbytecne neposila notifikace, kdyz uzivatel jeste nezmenil status, ze si je zacal cist. Cili, jestli mu tam blika obalka pro 1 zpravu nebo 10 je uz celkem jedno.

 
Nahoru Odpovědět 4. května 13:09
Avatar
katrincsak
Člen
Avatar
Odpovídá na Peter Mlich
katrincsak:4. května 13:32

To by byla krása, kdyby to šlo. Každopádně na serveru běží redakční systém, který využívá dalších xxx lidí a funguje přes to dost velká spousta webů. Takže takové zásahy pro jeden web nepřipadají v úvahu.

Nevím podle čeho počítáš kolik lidí na jednou online dokáže být, protože si nemyslím, že by číslo bylo takhle nízké. Však za 30s 100 spojení není vůbec velké číslo. Na víc načítat celý web je mnohem náročnější, než jen konkrétní ajaxový dotaz.

Také jsem si říkal, že bych mohl detekovat zda jsi v komentářích a to podle několika faktorů. Jednak zda jsi prováděl zrovna nějakou konverzaci, pravděpodobně očekáváš odpověď. Samozřejmě jen do určitého času, také podle toho zda máš na kliknuté komentáře a možná i nějaká kontrola myšky zda se nachází nad posledním příspěvkem kde probíhala diskuze. V opačném případě by to klidně stačilo 1x za minutu . Samozřejmě to popisuji hodně zjednodušeně a již teď vím že to bude velké ...

 
Nahoru Odpovědět 4. května 13:32
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.