-
Notifications
You must be signed in to change notification settings - Fork 12
Overview
SimEthereal uses fast and small UDP messaging to share object state between clients
and the server. It operates in an "authoritative server" environment and only the deltas
of a "known good state" are sent so that redundant information can be eliminated.
The "known good state" is synchronized through a sort of transient reliable protocol
that uses a double-ack approach so that messages are always valid.
Each message packs as much state in as possible to try to fit under standard MTU sizes to keep the UDP packets from being split. As such, it's possible, in the worst case, to fit more than 80 object updates in a single 1500 byte message.
- Fast: optimize for message latency and keep overhead low
- Low bandwidth: pack as much state as possible into a single message
- Easy to plugin to jMonkeyEngine applications: uses the JME network service model
- Flexible: provide state syncing without dictating where the state comes from or how it will be used.
The EtherealHost is a standard SpiderMonkey HostedService and is the main server-side
component for SimEthereal. It internally manages the shared object spaces for each client.
It contains a ZoneManager that divides space into zones to provide view limits for
each client.
The game server code can manage its own objects in whatever way is sees fit and then simply notify the ZoneManager about the changes. The EtherealHost and its contained components will then make sure each client gets the UDP state updates they require.
The EtherealClient is a standard SpiderMonkey ClientService and is the main client-side component for SimEthereal. It receives the updates over the network and applies them to its local view of the SharedObjectSpace.
The game client code can add a SharedObjectListener to the EtherealClient to recieve events about object updates.
For more detailed information on each of these parts, see the Component Documentation.