Time event server
3 naročniki
3 naročniki
Mogoče kdo pozna kakšen "time event server" (niti ne vem kako se tej zadevi pravi).
Rad bi, da nekako sporočim kateri event se naj ob določenem času sproži. Recimo primer kako naj bi delovalo je igra travian. Tam ko napadeš sosednjo vas ti pove da bo bitke ob XX času konec. Sedaj v tem primeru bi jest rekel temu serverju ob XX uri mi sproži event "endBattle" z IDjem bitke 5.
No če kdo karkoli takega pozna bom zelo hvaležen. Ali pa samo idejo kako bi se to imenovalo in kako naj iščem.
Cron ni ql ker deluje na minute, jest bi rabil sekunde.
9 odgovorov
Cron enostavno ni namenje za take stvari.
Pravilna rešitev je, da si hraniš čas konca eventa in ob vsakem pageloadu preveriš, če je kakšen pretečen event še neobdelan. In če je, najprej obdelaš event, potem šele nadaljuješ z običajnim delom pri loadu strani. To je idealen način, ker za skripto ne bo razlike, če se bitka konča šele deset sekund kasneje, če prej ni bilo nobenega pageloada.
Baze imajo zelo učinkovito narejeno to, da ugotoviš, če je še kak neobdelan event, le pravilen index moraš postavit, pa imaš odgovor v roku delčka milisekunde, ki ne upočasni pageloada čisto nič.
Pa še moral boš pazit, da ti ne bosta dva pageloada začela obdelovat isti event, ker bo to pomenio, da boš izvedel dvojni napad/akcijo. Za to boš moral uporabit transakcije, ki jih ponuja večina današnjih DBMSjev.
Ja to je tudi ena izmed idej toda sem upal da obstaja kakšna prov namenska zadeva. Bom jutri na šihtu še malo pregledal kaj pravi stric googlu. Drugače bom pa spet odprl Visual Studio in bo C# power :D
Ena od idej je, da ti na strežniku v ozadju lavfa daemon (google it), kateremu sporočaš dogodke, ta pa kliče ustrezne stvari ob danem času.
Ja sem ravno ko sem post napisal šel to gledal. Verjetno bo to končna rešitev. Nek PHP daemon, ki bo preverjal vse zadeve.
Glej zadevo malo bolj enostavno.
Če jaz tebe napadem .... a je važno da se stvar izvede, če ni nobenga na strani?
Torej dokler en od naju ne pride na stran se dogodek ne rabi izvesti.
Ko pa pride .. nekdo od naju nazaj, pa skripta enostavni preveri, če je kakšen dogodek potrebno izvesti in ga izvede.
Točno to sem jaz napisal:
To je idealen način, ker za skripto ne bo razlike, če se bitka konča šele deset sekund kasneje, če prej ni bilo nobenega pageloada.
No to je bil samo primer :D Fora je da time event mora preverit konec dogodka, da vse akterje obvesti na mail/sms.
Se pravi ko se bitka konča ti dobiš na mail (ali sms) obvestilo o tem in o rezultatu.
Saj to je samo primer in se ne bo uporabljalo za igre ;)