Ragon Posted May 29, 2011 Report Posted May 29, 2011 Salutare tuturor,Vreau sa fac un joc online bazat pe browser.Problema este ca nu am idee cum sa fac sa actualizeze automat baza de date chear daca jucatorul ii offline. Actiunea X dureaza 30 minute.Cum fac sa actualizeze automat baza de date dupa cele 30 de minute? Quote
Robert1995 Posted May 29, 2011 Report Posted May 29, 2011 fa o verificare de timp la fiecare actiune generala , poate iti iese Quote
hammerfall Posted May 29, 2011 Report Posted May 29, 2011 Ai 2 optiuni pentru a face asta.1. Un cronjob care din 5 in 5 minute (sau ce interval vrei tu) verifica daca sunt actiuni care trebuiesc realizate2. La fiecare refresh verifici daca sunt actiuni care trebuie realizate.3. Practic e un upgrade al lui 2, de exemplu ai actiunea: "construieste casa", cand verifici nivelul casei, verifici intai daca era necesar sa finalizezi o actiune in baza de date.Varianta 1 nu o recomand sub nici o forma.Varianta 2 e ceva mai ok, dar la un numar mare de jucatori iti face o gramada de load inutil.Varianta 3 e cea mai buna, dar ai foarte mult de scris la coduri... Quote
totti93 Posted May 29, 2011 Report Posted May 29, 2011 Cron JobThe message you have entered is too short. Please lengthen your message to at least 10 characters. Quote
Ragon Posted May 29, 2011 Author Report Posted May 29, 2011 Ai 2 optiuni pentru a face asta.1. Un cronjob care din 5 in 5 minute (sau ce interval vrei tu) verifica daca sunt actiuni care trebuiesc realizate2. La fiecare refresh verifici daca sunt actiuni care trebuie realizate.3. Practic e un upgrade al lui 2, de exemplu ai actiunea: "construieste casa", cand verifici nivelul casei, verifici intai daca era necesar sa finalizezi o actiune in baza de date.Varianta 1 nu o recomand sub nici o forma.Varianta 2 e ceva mai ok, dar la un numar mare de jucatori iti face o gramada de load inutil.Varianta 3 e cea mai buna, dar ai foarte mult de scris la coduri...De ce nu recomanzi cronjob? Quote
hammerfall Posted May 29, 2011 Report Posted May 29, 2011 Pentru ca daca faci interogarile prea des, omori serverul. Daca le faci prea rar, va exista delay intre momentul finalizarii actiunii si momentul actualizarii ei in baza de date. Quote
Moderators Dragos Posted May 29, 2011 Moderators Report Posted May 29, 2011 Cu time().$actiune = time() + 60*30;if (time() < $actiune)echo "Faci ceva..";elseecho "Ai terminat de facut ceva."; Quote
Robert1995 Posted May 29, 2011 Report Posted May 29, 2011 Cum ti-am zis eu ma , depinde de joc , fa la cea mai des folosita actiune o verificare .. de Exemplu construiesti un cacat Quote
p3tru Posted May 29, 2011 Report Posted May 29, 2011 aaa, acuma am inteles:Daca e vorba de anumite perioade de timp mai lungi, poti face cu cronjob din cpanel pintr-un anumit fisier (wget -q -r fisier) ca sa nu se pastreze logurile.Daca nu cum a zis si synthes, doar ca putin diferit:Cand incepe actiunea sa se adauge in db prin NOW()+Xsecunde, ca sa rezulte timpul la care actiunea se termina, apoi:$actiune = selectezi din db NOW()+Xsecunde;if (time() > $actiune)echo "Faci ceva..";elseecho "Ai terminat de facut ceva."; Quote
Petzy Posted May 29, 2011 Report Posted May 29, 2011 de Exemplu construiesti un cacata fost epic. ))) Quote
Ragon Posted May 30, 2011 Author Report Posted May 30, 2011 Multumesc pentru ideei.Sa vad ce-mi iese.... Quote
Xander Posted May 30, 2011 Report Posted May 30, 2011 jocurile pe net ... sunt facute pe ticks:partea de client se ocupa doar de inserari si interogari (adaugi actiune si verifici status actiune)partea de server: la fiecare tick( o secunda sau jumate de secunda sau cat vrei ) verifici tot ce ai de verificat si updatezi ce e nevoie ( un script ce ruleaza non stop ) Quote
hammerfall Posted May 30, 2011 Report Posted May 30, 2011 @Xander, deja ceea ce propui tu consuma exagerat de multe resurse. Un server shared nu ti-ar permite asta, iar pentru un joc online de nivelul celui pe care vrea el sa-l faca (e la inceput de drum, deci e ceva de nivel mic) nu s-ar merita pus pe un VPS / dedicat care sa reziste la optiunea pe care ai propus-o tu.O alta varianta, mult mai complexa, dar cred ca ar fi cea mai ok din punct de vedere al resurselor, faci un script C++ (de preferat) sau python care sa ruleze continuu si as astepte diverse callback-uri cu actiuni pe care sa le indeplineasca. Un fel de server propriu-zis. Atunci ai avea serverul, o baza de date, interfata server-side (php-ul) si interfata client (html & js). Quote