Download Game! Currently 117 players and visitors. Last logged in:TatzaThorworVenturusNep

Blitzer's Blog >> 71704

Back to blogs index
Posted: 07 Aug 2026 15:09 [ permalink ]
$ pwd
$ ls -ltra
total 32
drwxr-xr-x 1 root rootB B30 AugB 7 11:58 ..
-rw-r--r-- 1 root rootB 232 AugB 7 12:00 package.json~
-rw-r--r-- 1 root rootB 269 AugB 7 12:01 package.json
-rw-r--r-- 1 root root 1451 AugB 7 12:02 app.js
-rw-r--r-- 1 root root 7623 AugB 7 12:05 mesh.js
drwxr-xr-x 1 root rootB B 7 AugB 7 12:06 .
-rw-r--r-- 1 root root 1848 AugB 7 12:06 index.html
$ python3 -m http.server 33880
Serving HTTP on 0.0.0.0 port 33880 (http://0.0.0.0:33880/) ...

==[ Chrome ]==
http://localhost:33880/
Mesh Verkko Client
[YHDISTETTY] Olen browser-48
[Alpha]: Aikaleima: 1786104465984
[Alpha]: Aikaleima: 1786104470984
[Alpha]: Aikaleima: 1786104475986
[Alpha]: Aikaleima: 1786104480986
[Alpha]: Aikaleima: 1786104485986
[Alpha]: Aikaleima: 1786104490986
[Alpha]: Aikaleima: 1786104495988

==[ 1 ]==
: Aikaleima: 1786104403486
[CHAT via TCP] Beta: Aikaleima: 1786104408487
[CHAT via TCP] Beta: Aikaleima: 1786104413490
[CHAT via TCP] Beta: Aikaleima: 1786104418490
[CHAT via TCP] Beta: Aikaleima: 1786104423491
[CHAT via TCP] Beta: Aikaleima: 1786104428491
[CHAT via TCP] Beta: Aikaleima: 1786104433492
[CHAT via TCP] Beta: Aikaleima: 1786104438492
[CHAT via TCP] Beta: Aikaleima: 1786104443494
[CHAT via TCP] Beta: Aikaleima: 1786104448498
[CHAT via TCP] Beta: Aikaleima: 1786104453499
[CHAT via TCP] Beta: Aikaleima: 1786104458499
[Alpha] Uusi WebSocket (Selain) yhteys!
[CHAT via TCP] Beta: Aikaleima: 1786104463501
[CHAT via WS] Selain_UI: Hei mesh-verkko! Terveisin alCB)m-selain. Kello on
12:07:47 PM
[CHAT via TCP] Beta: Aikaleima: 1786104468503
[CHAT via WS] Selain_UI: Hei mesh-verkko! Terveisin alCB)m-selain. Kello on
12:07:52 PM
[CHAT via TCP] Beta: Aikaleima: 1786104473505
[CHAT via WS] Selain_UI: Hei mesh-verkko! Terveisin alCB)m-selain. Kello on
12:07:57 PM
[CHAT via TCP] Beta: Aikaleima: 1786104478505
[CHAT via WS] Selain_UI: Hei mesh-verkko! Terveisin alCB)m-selain. Kello on
12:08:02 PM
[CHAT via TCP] Beta: Aikaleima: 1786104483508
[CHAT via WS] Selain_UI: Hei mesh-verkko! Terveisin alCB)m-selain. Kello on
12:08:07 PM
[CHAT via TCP] Beta: Aikaleima: 1786104488510
[CHAT via WS] Selain_UI: Hei mesh-verkko! Terveisin alCB)m-selain. Kello on
12:08:12 PM
[CHAT via TCP] Beta: Aikaleima: 1786104493511
[CHAT via WS] Selain_UI: Hei mesh-verkko! Terveisin alCB)m-selain. Kello on
12:08:17 PM
[CHAT via TCP] Beta: Aikaleima: 1786104498513
[CHAT via WS] Selain_UI: Hei mesh-verkko! Terveisin alCB)m-selain. Kello on
12:08:22 PM
[CHAT via TCP] Beta: Aikaleima: 1786104503515

Loistavaa! Lokit nC$yttC$vC$t aivan tC$ydellisiltC$. TC$mC$ vahvistaa, ettC$
"Stand-alone Vanilla JS IPC Backbone" toimii juuri niin saumattomasti kuin
suunnittelimme.

`Alpha`-instanssi toimii nyt tC$ydellisenC$ **siltana (Gateway)**: se puhuu
taustalla TCP:tC$ toisen Node-instanssin (`Beta`) kanssa ja palvelee
samanaikaisesti selainkC$yttC$jC$C$ (`Selain_UI`) WebSocketilla  tC$ysin ilman
ulkoisia riippuvuuksia!

### Pieni kosmeettinen huomio (UTF-8)

Huomasitko lokissa tekstin `alCB)m-selain`? TC$mC$ johtuu siitC$, ettC$
selaimen lC$hettC$mC$ merkkijono tulkittiin vC$C$rC$llC$ merkistC6llC$, koska
antamastani `index.html` -rungosta puuttui UTF-8 -mC$C$rittely.
Voit korjata tC$mC$n lisC$C$mC$llC$ `index.html` -tiedoston `<head>` -osioon:

```html
<meta charset="utf-8">

```

---

### Seuraavat askeleet: Mihin suuntaan viedC$C$n?

Nyt kun meillC$ on luotettava L4/L7-tason (Transport/Application) yhteys
tC$ysin vanillana, meidC$n pitC$isi alkaa miettiC$ verkon "C$lykkyyttC$".
TC$llC$ hetkellC$ selaimesi viestii vain `Alpha`:n kanssa. EntC$ jos selaimen
haluaa lC$hettC$C$ komennon (OPS) `Beta`:lle?

TC$ssC$ kolme olennaisinta kehityskohdetta tC$lle rungolle. MitC$ nC$istC$
haluaisit priorisoida?

**1. Viestien edelleenlC$hetys (Mesh Routing / Gossip Protocol)**
TC$llC$ hetkellC$, jos `targetId` on `null` (broadcast), vain suora naapuri
kuulee sen. Jotta tC$mC$ olisi oikea *mesh*, Nodejen pitC$isi osata
reitittC$C$ viestejC$ eteenpC$in (esim. Selain -> Alpha -> Beta). Koska olet
aiemmin rakentanut "Omega Router" -reitittimen, tC$mC$ konsepti on sinulle
tuttu. Tarvitsemme viesteihin uniikin viesti-ID:n, jotta estC$mme ikuiset
broadcast-luupit.

**2. Korkeamman tason API (Sovelluskerros)**
Nyt `app.js` ja `index.html` parsivat raakoja array-taulukoita `[1, 2,
sender...]`. KC$C$ritC$C$n tC$mC$ kauniimpaan, tapahtumapohjaiseen luokkaan,
jotta sovelluskehitys on jatkossa tC$llaista:

```javascript
mesh.on('chat', (msg, sender) => console.log(msg.text));
mesh.broadcast('ops', { command: 'restart_bot' });

```

**3. PEER-tietokannan persistenssi (Tilan tallennus)**
Toteutetaan aiemmin toivomasi ominaisuus: Nodet tallentavat `peers`-taulunsa
levylle (esim. `peers.json`) ja Selain tallentaa omansa `localStorageen`. Kun
instanssit kC$ynnistyvC$t uudelleen, ne yrittC$vC$t yhdistC$C$ suoraan
vanhoihin tuttuihin IP-osoitteisiin ilman UDP-autodiscovery-viivettC$
(erityisen tC$rkeC$C$ WAN-verkkojen yli, joissa UDP broadcast ei toimi).