Home GitHub RSS

Networking Brainstorm


Seminal paper on how Age of Empires II dealt with the networking problem by implementing client lockstep simulations. Lockstep implementation here requires N2 stable (but slow) connections.

Important finding that overall network latency didn’t actually impact the outcome of RTS games much.

Scales up clients connecting to a game by implementing multiple proxy servers. Servers are totally connected but each proxy is only allowed to make a specific set of (mutually exclusive) mutations. Features dynamic rebalancing in case a server crashes.

Goes into detail a bit about the evolution of networking models in gaming; goes a bit into detail about how modern day rewind & replay lag compensation works.

Short, accessible explanation of one possible lockstep implementation.

Accessible explanation of how Supreme Commander (2007) implemented and optimized lockstep. Specifically deals with global tick synchronization implementation – may also be applicable in client / server model.

Goes into detail about how Supreme Commander implemented the communications and sync protocol. Very useful reference.

Includes some links to sample implementations of lockstep.

More information on lockstep implementation and explanation.

Very good article on a possible approach to a client-server model of RTS network communications – by sending linear transformations of data trajectories (instead of frame-by-frame updates) to save on bandwidth.

Convenient back of the envelope bandwith calculations for RTS games.

Factorio originally used lockstep to deal with broadcasting game state. This is an interesting case as it similarly has to deal with large maps and changing terrain with large amounts of data being transferred across multiple clients.

Describes in detail the networking model migration for Factorio from lockstep to server-elect model.

Summarizes lockstep and client-server implementation and provides sample command message samples.

Starcraft II’s internal tick rate is 16 - 20Hz; apparently other RTS can be as low as 8Hz. Good reference / justification.

Code References


Minke Zhang
Minke is a software engineer based in the US. He enjoys running, climbing, photography, and banana-related facts. He works on DownFlux in his spare time. Minke prefers spaces over tabs in Python.