Automatically generated narration. Code examples are available in the article.
A place to test the networking ideas
NeoSekai is my first metaverse MVP. I used it to test how a server behaves when many players share the same scene, building on the networking work in NeoSocket.
The demo below comes from testing with up to 480 concurrent connections in one cell. It is a prototype test, rather than evidence of a production service at that scale.
Batching updates
Imagine 500 players jumping at once. If every action is sent separately to every player, that can mean around 250,000 deliveries in a simple all-to-all model.
I tried grouping the actions within a 100 ms window, or a 10 Hz cell tick, and sending one batch to each recipient. In that simplified example, this reduces the number of outgoing sends to about 500. The action data is still there; batching mainly reduces repeated sends and overhead.
Choosing a tick rate
The prototype explores different update intervals for different areas: slower updates in quiet spaces, faster updates where combat needs them. Longer intervals reduce update frequency but can make interactions feel delayed. Very short intervals increase the processing and bandwidth budget, so the useful setting needs to be measured in the actual game.
Dividing the world into cells
The design divides the world into cells roughly the size of a screen. A StateServer manages a group of cells, with about 100 cells used as a starting point in the design. Servers exchange state when a player crosses into a cell managed elsewhere.
I also explored shifting cells between StateServers when one becomes busy. The aim is to spread load without separating players into isolated rooms.
What the MVP established
The prototype gave me a way to test batching and crowded scenes on modest hardware. It did not validate earlier estimates of millions of users or guarantee a fixed number of players per server. Cross-server handoff, latency, and load balancing still need testing under realistic workloads.
The useful result for me was a clearer view of what gets sent, how often it gets sent, and which players actually need each update.