„Cahovat“ pripojenie do DB v prípade neúspechu
- Lkopo
- Člen | 65
Zdravím,
po dlhšom čase sa opäť pokúšam zrobiť appku v Nette, ale teraz prv pred tvorbou celkovej aplikácie potrebujem vyriešiť otázku ohľadom ukladania si neúspechu pripojenia do DB a nepokúšať sa pripojiť hneď na ďalší refresh. Prezeral som si dokumentáciu, ale nič som tam ohľadom toho nenašiel, takže to zrejme ani implementované nebude.
Dôvod je, že ak nastane „výpadok“ tak väčšinou máme MySQL server zaťažený a connect trvá dlhú dobu čakajúci na response a keby každý používateľ stále dával refresh spôsobí to, že sa aj web spomalí, lebo ten script beží a ostatné requesty na web sú teda v queue.
Teda moja otázka spočíva, kde a ako by som mal handlovať pripojenie do DB predtým, než sa skôr pripojí a overiť, či napr. pred max 3 minútami sa nemohla aplikácia pripojiť.
Ďakujem za každú radu :).
- newPOPE
- Člen | 648
No toto je nejaka kravina (je mozne ze nerozumiem otazke). Lebo to ze sa app pripaja k DB pri requeste je normalna vec (a MySQL je na take pripojenia postavena keby nebola tak by to nefungovalo).
Cize by som zacal s tym preco mate MySQL vytazeny. A co mozte urobit pre to aby to tak nebolo teda aby ste zabezpecili to aby tu zataz ustal.
EDIT: a este sa sam seba spytaj ako chces zistit ci je obchod (mysql) zatvoreny ked tam proste neprides (mysql connect) a nezistis to?
Editoval newPOPE (28. 8. 2015 10:51)
- Lkopo
- Člen | 65
Áno je v poriadku, že sa pripája. Ale ak sa nemôže pripojiť, nech to neskúša aj 50× za sebou lebo používatelia z dôvodu, že niečo nejde to skúsia otvoriť ešte x-krát po sebe, ale automaticky dostane správu, že nie je možné sa pripojiť a po cca 3 minútach sa pokúsi appka reálne pripojiť (ak opäť neúspech, tak sa to znova uloží a o ďalšie 3 min to skúsi znova).
Dôvod zaťaženia môžu byť napr. útoky, ktoré veľmi ovplyvniť nemôžeme a neraz sa nám stalo, že kvôli pomalému pripojeniu do databázy (o ktorej som sa zabudol zmieniť je vzdialená) nám aj celý web „vypadol“, lebo tam bežali stále scripty, čakajúce na odpoveď na vzdialený MySQL server.
Editoval Lkopo (28. 8. 2015 10:55)
- Mysteria
- Člen | 797
Tak můžeš použít třeba normálně session ne? Ve více prohlížečích to snad tolik lidí zkoušet nebudou. Při failnutí připojení si zapiš do session čas requestu a pak někde v BasePresenteru se podívej jakej je tam čas a pokud bude menší než X minut, tak si tam napiš nějakou chybovou hlášku a aplikaci ukonči. Pokud jsem to teda pochopil správně a chceš ten „časovač“ pro každého uživatele zvlášť.
Editoval Mysteria (28. 8. 2015 18:35)
- Lkopo
- Člen | 65
Nie, globálne to myslím, teda pre všetkých používateľov spoločne.
Takto osobitne to stále docieli k tomu, že sa tie požiadavky budú spúšťať aj keď je už vzdialený MySQL server nedostupný.
Jednoduchá non-framework metóda je 1 txt súbor, kde je uložený čas posledného výpadku a proste skript na pripojenie do DB si načíta obsah toho súboru a porovná so súčasným časom. Ak je rozdiel väčší ako 3 minúty, skúsi to znova a ak zase výpadok, tak sa ten čas v txt prepíše aktuálnym.
Editoval Lkopo (28. 8. 2015 19:10)
- flr
- Člen | 6
Ja bych to osetril v ErrorPresenteru – podivas jestli se vyjimka tyka databaze (napr. ConnectionException), a kdyz jo, tak si ulozis cas kdy k tomu doslo. Ulozit to muzes treba do cache. V BasePresenteru potom tu cache prectes a v pripade potreby ukoncis aplikaci.