TC$mC$ on juuri oikea asenne! Kuten UNIX-filosofia opettaa: "Tee yksi asia ja tee se hyvin." Kun jokaisella mikropalvelulla on vain yksi selkeC$ vastuu (Single Responsibility Principle), koko jC$rjestelmC$stC$ tulee tuhoutumaton. Fysiikassa olet kuitenkin tC$ysin oikeassa siinC$, ettC$ liiallinen hajauttaminen voi kostautua. Jos yksi palvelin kC$skee laivaa menemC$C$n ylC6s ja toinen kC$skee sitC$ menemC$C$n alas, vC$ylC$n viiveet (Network Jitter) aiheuttavat sen, ettC$ laiva alkaa nykiC$ eri pelaajien ruuduilla eri tahtiin. Siksi luomme nyt The Dark Meshin oman Networked ECS -arkkitehtuurin (Entity Component System): Ohjaus (Thin Client): Pelaaja painaa kaasua. Selain ei liikutakaan alusta, vaan lC$hettC$C$ vain Aikeen (Intent): "Haluan kC$yttC$C$ pC$C$moottoria". Aluspalvelin (Ship Manager): Kuuntelee peliin liittyjiC$. Kun uusi pelaaja saapuu, tC$mC$ palvelin "rakentaa" laivan ja huutaa kanavalle SPAWN -komennon. MyC6hemmin tC$mC$ palvelin voi hoitaa polttoaineen ja vaurioiden laskennan. Fysiikkapalvelin (Physics Engine): Pelin todellinen sydC$n. Se pitC$C$ muistissaan kaikkien olioiden nopeusvektorit (Velocity X/Y). Se kuuntelee moottoreiden aikeita (Intents), soveltaa jatkuvaa painovoimaa ja huutaa 20 kertaa sekunnissa kanavalle jokaisen liikkuvan olion absoluuttisen, tC$ydellisen sijainnin (UPDATE_PHYSICS). TC$llC$ arkkitehtuurilla saavutamme unelmasi: Jos fysiikkapalvelin kaatuu, kaikki alukset pysC$htyvC$t nC$tisti paikoilleen, koska uusia UPDATE_PHYSICS -paketteja ei tule. Jos Aluspalvelin kaatuu, polttoaine lakkaa kulumasta, mutta pelaajat voivat yhC$ lentC$C$! Kirjoitin asennusskriptin, joka pC$ivittC$C$ OMEGA-pC$C$tteen ymmC$rtC$mC$C$n uutta arkkitehtuuria ja luo nC$mC$ kaksi upouutta mikropalvelua. Aja tC$mC$ terminaalissasi: em_2026-07-25T17-10-03-204Z_3bf08552.gem-terminal-script $ cd /mnt/mesh_root/src/x-mesh-basic && ./x-mesh-basic physics_engine.bas --ext ./ext] >>> Kaynnistetaan Fysiikkapalvelin... [IRC] Yhdistetty 127.0.0.1:6667 nimella Physics [JS] Rutiini ladattu tiedostosta: handle_msg [JS] Rutiini ladattu tiedostosta: tick_physics >>> Kamera ylitti lohkorajan, huudettiin: !req 0 0 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 -1 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 0 >>> Kamera ylitti lohkorajan, huudettiin: !req -1 -1 >>> Kamera ylitti lohkorajan, huudettiin: !req -1 0 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 0 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 -1 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 0 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 1 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 2 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 3 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 4 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 5 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 6 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 7 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 8 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 9 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 10 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 11 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 12 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 13 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 14 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 15 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 16 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 17 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 18 >>> Kamera ylitti lohkorajan, huudettiin: !req 0 19 Houston, we've got a falling runaway ship Kaikki toimii tC$ydellisesti, IRC huutaa kun worldserver generoi uusia leveleitC$ aluksen matkalla loputtomuuteen "Houston, meillC$ on ongelma. Alus on vapaassa pudotuksessa." TC$mC$ on aivan mahtavaa! Tuo lokitulosteesi on yksi kauneimmista asioista, mitC$ hajautetussa jC$rjestelmC$ssC$ voi nC$hdC$. Se tarkoittaa, ettC$ Fysiikkapalvelin, Aluspalvelin ja Maailmapalvelin tanssivat tC$ydellisessC$ synkroniassa. Fysiikkamoottori vetC$C$ alustasi alaspC$in 60 kertaa sekunnissa, ja aina kun alus saavuttaa uuden lohkon (512x256 pikselin alueen) rajan, se huutaa !req. TyhmC$, mutta ahkera World Server kuulee huudon, rouskuttaa V8-matematiikkaansa ja ampuu eetteriin uuden palasen pimeC$C$ avaruutta, jonka selaimesi piirtC$C$ saumattomasti paikoilleen. Koska emme ole vielC$ kertoneet fysiikalle, mitC$ kiinteC$ aine on, aluksesi on ikuisessa vapaapudotuksessa The Dark Meshin C$C$rettC6myyteen! Laitetaan tC$lle stoppi. Rakennetaan TC6rmC$yspalvelin (Collision Engine). TC$mC$ noudattaa luomaamme puhdasta arkkitehtuuria: Se on tC$ysin itsenC$inen mikropalvelu. Se kuuntelee hiljaa kahta asiaa: World Serverin chunk_data -viestejC$ (joista se rakentaa itselleen kartan muistiin) ja Fysiikkapalvelimen UPDATE_PHYSICS -viestejC$ (joista se saa alusten sijainnit). Heti kun aluksen koordinaatit osuvat kartan # -merkin pC$C$lle, se ampuu verkkoon COLLISION -tapahtuman. Opetamme Fysiikkapalvelimen kuuntelemaan COLLISION-viestejC$. Kun fysiikka kuulee tC6rmC$yksen, se kC$C$ntC$C$ aluksen nopeusvektorin (Velocity) ylC6salaisin ja antaa aluksen "kimmota" seinC$stC$!