ugrás a tartalomhoz

Adatbázis művelet, körökre osztott online játékban körönként

DevNULL · 2005. Júl. 28. (Cs), 23.11
Sziasztok

Ezt a kérdést csak úgy kíváncsiságból teszem fel.

Szóval vannak az interneten olyan játékok, melyek körökre vannak osztva úgy hogy 1 óra 1 kör.
Minden felhasználó adatát adatbázisban tárolják, viszont ezek körönként (azaz óránként) változnak.
A kérdésem az lenne, hogy PHP-vel meg lehet oldani azt, hogy minden egész órában végrehajtson egy scriptet az adatbázison (bár így jobban belegondolva ez nem valószínű). Vagy egyszerűen minden órában a legelső kérés előtt hajtódik esetleg végre. Vagy ilyenkor kell egy kis progit csinálni, ami nem PHP-s és ami minden órában lefut a serveren????
 
1

cron

kisstoth · 2005. Júl. 28. (Cs), 23.39
Linux alatt használd a cron nevű sedégprogramot.

Üdvözlettel,
Kiss-Tóth Marcell
2

A kérésre teljesen jó megoldás

Jano · 2005. Júl. 28. (Cs), 23.53
Az az ötleted, hogy az első kérés esetén hajtódik végre a modositas teljesen jo otlet, hiszen nem fogja tudni megkulonboztetni a lekero, hogy ebben a pillanatban valtozott-e meg az adat, vagy mondjuk 10 perce, valoban az oravaltas pillanataban!

Sot! Legrosszabb esetet feltetelezve mivel az operacios rendszer több feladatot kell, hogy vegre hajtson lehet, hogy a cron lefutása nem tud pontosan az ora valtoaskor lefutni, igy ha valaki nagyon turelmetlen es oravaltaskor nyomogatja a refresh gombot, meg akar az elozo orai allapotot is lathatja mert a cron meg nem futott le.
3

És ha senki nem nézi órákig....

DevNULL · 2005. Júl. 29. (P), 01.10
És mi van ha senki nem nézi meg az oldalt órákig, mondjuk éjjel mindenki alszik és 0:00-7:00 nem nézi senki. Mondjuk akkor úgye lehetne úgy is csinálni az adatbázis átírását, hogy figyelembe veszi a script az eltelt órákat is.

De mi van mondjuk, ha valaki a játékban kiad egy parancsot 23:30-kor aminek csak 3:00 lesz eredménye és ez az eredmény befolyásolja az ezután történő dolgokat. Viszont ha az első lekérés mondjuk csak 7:11-kor jön, akkor az adatbázis csak akkor frissül és így 4 órán keresztül elmarad a várt befolyásolt történés aminek a kiadott parancs eredményeként kellett volna létrejönnie.
{lehet ez egy kicsit kuszára sikerült :))) }
A rövid lényeg, hogy csúszás lesz és ez hibát okoz. Szóval akkor ez esetben csak a segédprogram a megoldás.

Cron-nál meg talán az esetleges csúszás megoldható, hogy az oldalra kirakni egy feliratot ami jelzi hányadik kör és esetleg akkor nem nyomogatják pontban óraváltáskor annyit a refresh gombot. Mármint olyanra gondoltam, ami akkor is megváltozik, ha nem kérik le újra az oldalt. Bár azt nem tudom ez lehetséges-e, mert én arra gondoltam, hogy órák is vannak, amik mennek az oldalon lekérés nélkül (flash, Js), de viszont azoknak semmi közük a server órájához, hanem a gép óráját figyeli, nem????
4

nem egészen jó

zila · 2005. Júl. 29. (P), 08.18
Felmerül az a probléma is, hogy ez a körváltó script mennyi idő alatt fut le. Ha ez nagyon gyors és megoldod azt a problémát, amikor órákig nem nézik az oldalt, akkor járható a cron nélküli időzítés.

Én mindenképpen a cron-os utat látom járhatóbbnak, egyidőben a körváltás idejére megtiltanám, hogy a userek piszkálják az adatbázist. (Persze nem tudom milyen adatbázist használsz, és körváltáskor mit is kell csinálnod pontosan a db-ben. A játékosok száma se mindegy ugye...)

üdv,
Zila
5

Csak kíváncsiság...

DevNULL · 2005. Júl. 29. (P), 10.20
Azt hogy milyen adatbázist használok, meg hogy mit kell csinálni pontossan körváltáskor nem tudom megmondani. Mivel nem készítek ilyen játékot. (Bár végiggondolva a dolgot elméletileg nem lenne olyan nehéz, csak sokat kéne seggelni, amig azt a sok-sok sort beírom :)) )

Amúgy csak kíváncsiságból tettem fel a kérdést. Én is játszom egy ilyennel és hát érdekel a működése. Gondoltam itt hátha tudja valaki.
Vagy vannak ötletek :))
6

Ha lassú a script

Poetro · 2005. Júl. 29. (P), 13.59
Ha lassú a szcript, akkor érdemes berakni az adatbázisba egy értéket, vagy kirakni egy fájlt, amíg a script fut. Ha script befejezésekor törli a fájlt. Amíg a fájl létezik kirak mindig egy egyszerű HTML oldalt, hogy a Korváltás folyamatban, kérem várjon. Vagy valami ilyesmi. Ha becsülni lehet, hogy mennyi ideig fog futni a script, akkor ezt ki lehet írni. Az Körváltós oldalnak mondjuk lehet adni mondjuk egy 1 perces, vagy a körváltás végéig hátralevő idejű refresh-t JS-ben, vagy amiben szeretnéd, ami frissíti az oldalt, ha lejár az idő, és ekkor már remélhetőleg lezajlott a körváltás, és a szokásos felültetet kapod.
--------
Poetro