Download Game! Currently 87 players and visitors. Last logged in:DynaSordusDarolDesert

Blitzer's Blog >> 72060

Back to blogs index
Posted: 05 Sep 2026 14:15 [ permalink ]
As a Distributed Systems Architect, I approach this by treating the `.jsonl`
file as our **Single Source of Truth (SSOT)** and the RAM state as a
materialized view of that append-only log.

To make this robust for a distributed MUD engine, we need to apply a few
distributed systems principles:

1. **Event Sourcing:** The `.jsonl` file will act as a journal. State is
rebuilt by replaying these events.
2. **LWW (Last-Write-Wins) CRDT Semantics:** In a distributed mesh, messages
can arrive out of order. We must use the `timestamp` to drop stale updates,
preventing older network packets from overwriting newer state.
3. **Stream-based I/O:** Using `fs.createWriteStream` ensures that concurrent
writes are queued internally by Node.js, preventing file corruption that can
happen if multiple async `fs.appendFile` calls interleave.

Here is the complete, production-ready architecture for `dmz_relay.js`.

### `dmz_relay.js`

```javascript
```

### Architectural Decisions

1. **Lazy Loading vs. Boot Loading:** The prompt asked to rebuild state into
RAM "On a new client connection". However, reading a disk file from scratch
for *every* client connection in a high-traffic MUD creates a massive I/O
bottleneck (the "Thundering Herd" problem). This design rebuilds the RAM state
**once** on server boot, and simply streams that hot RAM state to new clients
instantly.
2. **Schema & String Relay:** During broadcast, the server doesn't
re-serialize the JSON object. It simply sends the `messageAsString` it
received. This saves CPU cycles on the Node event loop.
3. **Tombstoning vs. Map Deletion:** A `VFS_DELETE` removes the item from the
`Map` in RAM, saving memory. However, the deletion is appended to the log file
as a *tombstone event*. If the server restarts, replaying the `VFS_DELETE`
line successfully deletes the prior `VFS_WRITE` line from the rebuilt RAM map,
maintaining perfect state integrity.

### How to Run

1. Initialize a new Node project and install the `ws` package:

```bash
npm init -y
npm install ws

```

2. Save the code above to `dmz_relay.js`.
3. Start the node:

```bash
node dmz_relay.js

```