Download Game! Currently 81 players and visitors. Last logged in:KrypetDornierElwinesLouen

Blitzer's Blog >> 71703

Back to blogs index
Posted: 07 Aug 2026 15:04 [ permalink ]
Hienoa, homma rokkaa jo! Koska sinulla on valmiina kontteja tai useampia
terminaaleja, saat tC$stC$ parhaan hyC6dyn irti, kun parametrisoimme
`app.js`:n. NC$in voit kC$ynnistC$C$ useita instansseja rinnakkain ilman
koodin muokkausta ja nC$hdC$ kC$ttelyn livenC$.

PC$ivitC$ `app.js` tC$hC$n muotoon:

```javascript
import { HybridMeshNode } from './mesh.js';

/ Otetaan instanssin nimi komentoriviltC$ (esim. 'node app.js Alpha') 
/ tai generoidaan satunnainen, jos ei anneta.
const nodeName = process.argv[2] || `Bot_${Math.floor(Math.random() * 1000)}`;

async function main() {
    const node = new HybridMeshNode(nodeName);
    await node.start(); 

    // 1. Postilaatikon kuuntelija
    (async () => {
        for await (const msg of node.inbox) {
            if (msg.type === 0) {
                // Voit aktivoida tC$mC$n jos haluat nC$hdC$ GOSSIP-liikenteen,
 
                // mutta se spC$mmii konsolia 2 sekunnin vC$lein.
                // console.log(`[GOSSIP via ${msg.protocol}]:
${msg.payload.nameId}`);
            } 
            else if (msg.type === 2) {
                // Tulostetaan vain varsinaiset viestit
                console.log(`[CHAT via ${msg.protocol}] ${msg.payload.nameId
|| msg.senderId}: ${msg.payload.text}`);
            }
        }
    })();

    // 2. TestilC$hetys-looppi
    // LC$hetetC$C$n viesti 5 sekunnin vC$lein kaikille peer-taulun
instansseille
    setInterval(() => {
        for (const [peerId, peerData] of node.peers.entries()) {
             // Kokeillaan lC$hettC$C$ viesti. Verkkokerros valitsee TCP:n jos
se on auki.
             node.send(peerId, 2, ["chat"], { 
                 nameId: nodeName, 
                 text: `Aikaleima: ${Date.now()}` 
             });
        }
    }, 5000);
}

main();

```

Kokeile ajaa kahdessa eri ikkunassa (tai eri konteissa samassa lC$hiverkossa):

* Ikkuna 1: `node app.js Alpha`
* Ikkuna 2: `node app.js Beta`

PitC$isit nC$hdC$, kuinka ne lC6ytC$vC$t toisensa UDP:llC$, avaavat
TCP-yhteyden ja alkavat vaihtaa viestejC$. Voit testata fallbackia tappamalla
(Ctrl+C) toisen prosessin ja kC$ynnistC$mC$llC$ sen uudelleen, jolloin yhteys
palautuu automaattisesti.

---

### Seuraava askel: Chromium & Selain-Bridge (100% Vanilla)

Koska tavoitteena on "Stand-alone Vanilla JS" ilman ulkoisia kirjastoja (kuten
`ws` tai `socket.io`), selaimeen tarvittava WebSocket-yhteys pitC$C$ koodata
Node.js:n natiiviin `http`-moduuliin.

Selaimesi voi yhdistC$C$ suoraan tC$hC$n mesh-verkkoon luomalla natiivin
HTTP-palvelimen, joka ottaa kiinni selaimen `upgrade`-pyynnC6n.

Konsepti toimii nC$in:

1. **Node.js Mesh-instanssi** avaa perinteisen TCP/UDP-palvelimen lisC$ksi
tavallisen `http.createServer()` -palvelimen porttiin (esim. `33080`).
2. **Selain** suorittaa komennon `const ws = new WebSocket('ws://[noden-ip]:330
80')`.
3. **Node.js** huomaa `upgrade`-tapahtuman. Se lukee selaimen lC$hettC$mC$n
`Sec-WebSocket-Key` -otsikon, hashaa sen SHA-1:llC$ maagisen merkkijonon
kanssa (RFC 6455 -standardin mukaisesti) ja vastaa `Sec-WebSocket-Accept`
-otsikolla.
4. TC$mC$n jC$lkeen HTTP-yhteys muuttuu pysyvC$ksi WebSocketiksi. Noden
pC$C$ssC$ siitC$ syntyvC$ soketti (`socket`) kytketC$C$n tC$smC$lleen samaan
sisC$iseen P2P-luuppiin kuin aiemmin kirjoitettu TCP-soketti!

Selain saa syliinsC$ saman minimaalisen JSON-protokollan:
`[1, 2, "selain-id", "kohde-id", ["chat"], { "text": "Hei Nodet!" }]`

TC$mC$ ratkaisu on siitC$ tC$ydellinen, ettC$ sinun ei tarvitse asentaa
*yhtC$kC$C$n* npm-pakettia turvallisuusriskien minimoimiseksi, vaan Node.js:n
sisC$C$nrakennettu `crypto`-moduuli hoitaa kC$ttelyn.

==[ 1 ]==
$ node app.js Alpha
[Alpha] UDP Kuuntelee: 33000
[Alpha] TCP Kuuntelee: 33000
[Alpha] TCP Yhdistetty -> 1786104192368-c610b5

==[ 2 ]==
$ node app.js Beta
[Beta] UDP Kuuntelee: 33001
[Beta] TCP Kuuntelee: 33001
[CHAT via TCP] Alpha: Aikaleima: 1786104197470
[CHAT via TCP] Alpha: Aikaleima: 1786104202471
[CHAT via TCP] Alpha: Aikaleima: 1786104207472
[CHAT via TCP] Alpha: Aikaleima: 1786104212472

==================