Diskuze: neustále běžící script na serveru
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Jestli si myslíš, že přičítání surovin se děje tak, že script nepřetržitě připočítává surovinu po surovině, tak si to myslíš špatně. Vždy se to vypočítává na základě události. Tedy když se přihlásíš jednou denně, tak se ti vypočítá počet surovin, od posledního odhlášení po aktuální přihlášení krát hodinová produkce. Z toho se odečte spotřeba, nebo loupeže a td. Tedy vždy se to vypočítává na základě nějaké události...
No ale pokud by bylo potreba nejake aktualni udaje neprihlaseneho hrace pro jineho, tak by bylo potreba mit uz udaje vypocitany.
Podival bych se po nejakem hostingu s planovacem (cron - namatkou pres stejdu googla mi vyskocila endora) a poustel bych pravidelne ulohou skript, kde se periodicky vypocita vse potrebne
riesenie tohoto problemu neustale beziacim skryptom je nevhodne a navyse
zbytocne zatazuje server....
treba to riesit pomocou udalosti a prepocitavanim, v tomto pripade dany script
nezatazuje server a popravde sa script spusta tolkokrat, kolkokrat si ho
uzivatelia vyziadaju (cize pokial su 10-ti uzivatelia a ma sa spustit iba raz,
tak sa spusti 10x, pre kazdeho zvlast), s tym treba taktiez pocitat
Děkuji za odpovědi, trochu jsem to promyslel a teoreticky by se dalo všechno vypočítat zpětně až když to bude potřeba. Akorát bude trochu problém pokud se suroviny nebudou vyrábět celou dobu stejně (např. se dostaví upgrade budovy, takže produkce suroviny vzroste o 10%).
Můžeš udělat to, že si stav surovin uložíš vždy při převzetí nového stavu (úrovně) budovy (nebo jiné detekce změny produkce) napevno do databáze. S počtem surovin si budeš muset uložit i datum poslední aktualizace, aby bylo možné to dopočítávat.
To znamená, že nebude problém s úrovněmi budov, aktuální stav si vždy spočítáš bez problémů.
// Takhle jednoduše dopočteš suroviny, když budeš potřebovat aktuální stav
naposled uložené + (počet hodin od poslední aktualizace * počet surovin za hodinu)
Naskýtá se problém jak aktualizovat stav surovin zrovna ve chvíli kdy se dostaví budova, pokud hráč zrovna nebude online. Napadá mě akorát nastavit nějaký "budík" který by ve stanovený čas spustil script, ale jak, to netuším.
Opět to přepočítáš, až to bude požadováno. Zatočím-li právě teď na tvou vesnici a ty jsi den nebyl přihlášen, tak se prostě načtou patřičné údaje z databáze společně s tím, kdy se mají dostavět budovy, a nějaký chytrý algoritmus to dopočítá. Tedy nejprve do události, kdy se dostaví upgrade, pak od upgradu do současnosti. Přepočítané hodnoty se uloží zpět do databáze a vrátí se jiné části programu, aby se mohl provést útok.
Vlastně to bude takový blackbox. Vytvoříš si třídu (nebo několik tříd), která jako jediná bude číst a měnit suroviny ve tvé vesnici. Vždy, když budeš chtít číst, načte data z databáze, přičte suroviny na základě času. Pokud se během té doby něco mimořádného stalo, tak to také započítá a výsledek uloží do databáze a taktéž ho vrátí.
Smysl je tedy takový, že nebudeš muset nikdy používat CRONa ani jiné skripty, které by musely běžet neustále. Možnou nevýhodou je to, že pokud je ve vesnici hodně událostí, mohl by přepočet chvíli trvat. Také by mohlo docházet ke konfliktům, kdy by se spustily dva dotazy na danou vesnici a tedy dva různá vlákna by začala počítat, jak to s tím stavem surovin vlastně je. To by ale vadit moc nemělo si myslím, žádné chyby by se vyskytovat neměly, jen se může stát, že se sem tam něco bude počítat dvakrát.
Zobrazeno 8 zpráv z 8.