Ajattelin alkaa tekemään huvin vuoksi tuollaista Travian-tyylistä selainpeliä, jossa voi siis generoidaan rahaa, voi lähettää hyökkäyksiä (jotka kestää x aikaa) ja tuhota joukkoja.
Mietin vain sellaista, että kannattaisiko jokainen hyökkäys tehdä ajastettuna cron-ajona vai sillain että jokainen sivunlataus hoitaa mahdolliset hyökkäykset sun muut toiminnot, jotka tapahtuu vasta x-ajan päästä ja vaikuttaa molempien pelaajien joukkoihin/rahoihin.
Cronin kanssa systeemi olisi huomattavasti helpompi tehdä, mutta löytääkö joku siitä jotain huonoja puolia?
Joukothan kumminkin joutuu varaamaan hyökkäystä varten, että niitä ei voi käyttää muualla samaan aikaan, niin sinänsä tuossa sivun latauksen yhteydessä tapahtuvassa tarkistuksessa ei pitäisi olla ongelmia. Voihan sitä käyttää jotain teksti tiedostoa vaikka että tarkistukset taistelujen varalta tehdään vain minuutin välein tms, eikä joka ikisellä lataus kerralla.
Mites tuo sitten niin paljon helpompi cronin avulla olisi tehdä, tarve on kumminkin pystyä peruttamaan hyökkäykset(luulisi) ja saada niistä tietoakin irti. Kuhan ne tietokannassa on, niin tuo ainakin onnistuu helposti.
Eli eipä sitä kummempia tartte ko kattoo sivun latauksessa jos hyökkäys_perillä_date < nykyinen_date, niin toteutetaan taistelu ja poistetaan rivi.
Tietty sivulle voisi lisätä myös samalla jonku viivästetyn ajax päivityksen(aina uudelleen ja uudelleen siihen asti kun hyökkäys on tapahtunut), joka päivittää joukot/resurssit jne. sen jälkeen hyökkäys tapahtuu. Ja tämänkin ajax-kutsun yhteydessä voi tarkastaa onko taisteluja mitkä pitää toteuttaa, joten vaikka kukaan ei lataisi sivua niin saisi taistelut käytyä.
Periaatteessa riittää, että päivität aina sivun latauksen yhteydessä lataajan kylän, kylään saapuvat hyökkäykset ja kylästä lähteneet hyökkäykset. Lisäksi päivitetään kylä aina, kun sen tietoja tutkitaan. Jos kylään on tullut useita taisteluita, suoritetaan ne saapumisjärjestyksessä.
Lyhyesti ainut huono puoli sivunlataus-tyylin kanssa on että serveri tekee enemmän, ehkä paljonkin enemmän töitä. Jos tuosta on tarkotus tehä peli pienelle käyttäjäkunnalle tai suurilla resursseilla, niin kai se toimii.
Minusta cron on paljon vaikeampi ja epävarmempi tapa. Muutenkaan cron ei ole kertaluontoisten asioiden ajamiseen oikea työkalu, vaan siihen on esimerkiksi atd (at daemon).
Suosittelen joka tapauksessa sivunlatauksia, jos ne mahdolliset laskut eivät vie kohtuuttoman kauan.
User137 kirjoitti:
Serveri tekee enemmän, ehkä paljonkin enemmän töitä.
Mitä töitä se tekee? Minusta koneen kokonaistyömäärä voi olla jopa vähäisempi.
punppis kirjoitti:
kannattaisiko jokainen hyökkäys tehdä ajastettuna cron-ajona
Meinasitko luoda jokaisen käyttäjän jokaista hyökksäyksestä uuden cron jobin? :D
En tiedä mikä cron on, enkä ole pelannut Traviania, mutta jos se toimii kuten muut pelaamani selainpelit, niin se laskee tietyn ajan välein pelin tapahtumat. Esim jotkut vanhat StarSphere ja Planetia laski tapahtumat tasan tunnin välein ja se prosessi saatto kestää jopa 5 minuuttia, jos taisteluja oli paljon.
Kun sinä aikana pelaaja vain "asettaa muuttujia ja lukee niitä", niin serverin tehtäväksi jää vain kertoa pelaajille nykytilanne ja ottaa vastaan uusia käskyjä. Jos kaikki 100000 pelaajaa voisikin yhtäaikaa suorittaa myös taisteluja, niin se saisi laskettavakseen paitsi taisteluita, myös tilanteen päivityksiä ja muuta reaaliajassa. Logit ja tilastoinnit mm. vaatii oman suoritinaikansa. Peli oli ihan tarpeeksi laginen ilman noitakin.
No nuo nyt oli vain äärimmäisen yksinkertaisia pelejä, joissa ei käytännössä ollut kuin lista aluksia joita pelaaja osti lisää. Oletan että Travianissa tapahtuu paljon enemmän.
User137: Eivätkö siis ehdottamasi vaihtoehdot ole pieni lagi joka sivunlatauksella tai 5 minuutin täysjumitus aina tunnin välein? Summa lienee suunnilleen sama, ellei tuota kerran tunnissa ajettavaa osuutta ole erikseen toteutettu jollain tehokkaammalla kielellä kuin pelin muita osia. Oikein toteutettuna systeemistä tulee sellainen, että vaihto näiden kahden tavan välillä on ihan muutaman rivin muutos.
Nyt kun tarkemmin miettii niin eipä tuosta cronista kyllä ole mitään hyötyä... Näillä eteenpäin, kiitos vastauksista!
Aihe on jo aika vanha, joten et voi enää vastata siihen.