Download Game! Currently 68 players and visitors. Last logged in:SerkeiiAurosXothGlauri

Blitzer's Blog >> 71639

Back to blogs index
Posted: 04 Aug 2026 03:42 [ permalink ]
Olet aivan oikeassa, ja lyC6n tC$ssC$ kohtaa virtuaalista kC$ttC$ otsaani!

MinC$ sorruin taas miettimC$C$n tC$tC$ perinteisen keskitetyn
web-arkkitehtuurin (Client-Server) kautta ja unohdin kokonaan The Dark Meshin
absoluuttisen ytimen: **Kaikki ovat solmuja (Nodes), myC6s selain.**

Selaimesi (M-Suite / The HUD) ei ole mikC$C$n tyhmC$ web-sivu. Se on
kokonainen isomorfinen kC$yttC6jC$rjestelmC$, jossa pyC6rii virtuaalikone,
X-MESH-BASIC -tulkki ja oma sisC$inen tapahtumasilmukka (Event Loop). Se
*todellakin* osaa ajaa omaa lokaalia OMEGA-reititintC$C$n suoraan muistissa ja
pollata lC$hintC$ ylemmC$n tason solmua (kuten portin 28888 reititintC$)!

TC$mC$ on arkkitehtuurisesti tC$ysin ylivoimainen lC$hestymistapa SSE-putkiin
tai WebSocket-viritelmiin verrattuna, koska:

1. **P2P Polling on Crash-Only:** Jos selain kaatuu tai yhteys katkeaa,
datachunkit jC$C$vC$t kiltisti ylemmC$n reitittimen OUT-jonoon odottamaan. Kun
selain kC$ynnistyy uudelleen, sen sisC$inen reititin jatkaa pollaamista
tC$smC$lleen siitC$ mihin jC$C$tiin.
2. **Ei tilaa (Stateless):** YlemmC$n reitittimen ei tarvitse pitC$C$ yllC$
muistia kuluttavia TCP-yhteyksiC$ selaimeen.
3. **Isomorfisuus toteutuu:** Selaimen sisC$llC$ pyC6rivC$ BASIC-skripti ei
tiedC$ pollaavansa ulkoista verkkoa. Se vain nC$kee, ettC$ sen omaan lokaaliin
IN-jonoon (muistissa) ilmestyy dataa.

TC$mC$n toteuttaminen vaatii vain yhden pienen lisC$yksen tuohon loistavaan
`omega_router_v3.js` -tiedostoon: yksinkertaisen pollaus-pC$C$tepisteen, josta
alemman tason solmut (kuten selaimesi) voivat kC$ydC$ hakemassa heille
osoitetut paketit OUT-jonosta.

LisC$C$mC$llC$ tC$mC$n pC$tkC$n reitittimeen API-osioon:

```javascript
/ --- OMEGA EGRESS POLL (Alemmat solmut hakevat datansa) ---
app.get('/api/omega/poll', async (req, res) => {
    const targetId = req.query.id;
    if (!targetId) return res.status(400).json({ error: "Missing node id" });

    try {
        const files = await fs.readdir(DIRS.out);
        for (const file of files.filter(f => f.endsWith('.json'))) {
            const outPath = path.join(DIRS.out, file);
            const archOutPath = path.join(DIRS.archive_out, file);
            
            const packet = JSON.parse(await fs.readFile(outPath, 'utf8'));
            
            if (packet.head.dst === targetId) {
                // Paketti lC6ydetty! SiirretC$C$n arkistoon ja toimitetaan
pollaajalle.
                await fs.rename(outPath, archOutPath);
                return res.json(packet); 
            }
        }
        // Jono tyhjC$ tC$lle solmulle
        res.json({ status: "empty" });
    } catch (e) {
        res.status(500).json({ error: e.message });
    }
});

```

TC$mC$n jC$lkeen selaimesi M-GUI voi kC$yttC$C$ valmista `HTTP GET` -logiikkaa
(tai JS:n puolella `setInterval` ja `fetch`) pollatakseen `http://localhost:288
88/api/omega/poll?id=Kallen_Selain` omaan tahtiinsa. Jokainen haku tuo yhden
`OMG-SYNC-CHUNK` -paketin kerrallaan, kunnes jono on tyhjC$, tC$smC$lleen
kuten ZFS-valutuksessa pitC$C$kin.

Haluatko, ettC$ pC$ivitC$n tuon `omega_router_v3.js` -tiedoston tC$llC$
P2P-pollaus -kyvykkyydellC$ x-editbotin kautta, jotta voimme kytkeC$ selaimesi
virtuaalireitittimen suoraan letkuun kiinni?