Open Benchmark

Transform Sync
Bandwidth Comparison

250 dynamic objects, 30 syncs per second, identical precision settings across all frameworks. Wire bandwidth measured with Wireshark over a minimum two-minute capture, averaged across two runs.

See It Running.

The demo below is the Reactor benchmark scene running live in the browser. 250 asteroids with rigid body physics, synced at 30 Hz, using the same configuration as the benchmark.

Demo uses WebSocket over WSS. Numbers displayed in the top-left corner show live goodput and sync rate.

Wire Bandwidth
per Connected Client

Total bandwidth received by one client syncing all 250 objects at 30 Hz. Lower is better.

Reactor
~15 kB/s ~10 kB/s goodput
PurrNet
~100 kB/s ~95 kB/s goodput
FishNet
~103 kB/s ~98 kB/s goodput
Photon Fusion 2
~112 kB/s ~107 kB/s goodput
Mirror
~122 kB/s ~117 kB/s goodput
SFS2X
~160 kB/s ~155 kB/s goodput
NGO
~185 kB/s ~180 kB/s goodput

Goodput figures for all non-Reactor frameworks are estimates. Wire bandwidth is the total bytes received at the network interface; goodput excludes protocol overhead. Reactor goodput is measured directly by the engine.

How the Test
Was Run.

Simulation

250 asteroids with dynamic rigid bodies moving through a sphere, colliding with each other and a central planetoid. Objects accelerate and decelerate toward random target speeds. The interaction-driven collisions produce varied, non-uniform motion similar to a real game scene.

Configuration

All frameworks were set to sync 30 times per second. Where frameworks expose precision or threshold settings, position precision was set to 0.01 and rotation precision to 0.001. Frameworks that do not expose those settings were configured to their most aggressive available data reduction options. For example, NGO's half-float quaternion setting was enabled, which is the most compressed rotation representation it offers.

Measurement

Wire bandwidth was captured with Wireshark on a local machine running client and server on the same host. Each framework was run for a minimum of two minutes and averaged. Each test was run twice and the two results were averaged and rounded to the nearest kB/s.

Object count

250 objects was chosen because Photon Fusion 2 does not sync more than 255 objects in a single update under default configuration. This gives all frameworks equal footing at the same object count.

Framework versions and key settings

Framework Version Sync rate Transport
Reactor 1.1.2 30 Hz (server 60 Hz) RUDP
PurrNet 1.14.0 30 Hz UDP
FishNet 4.6.12R 30 Hz Tugboat (UDP)
Photon Fusion 2 2.0.6.1034 30 Hz UDP
Mirror 96.0.1 30 Hz KCP (UDP)
SFS2X 2.19.0 30 Hz TCP
NGO 2.4.4 30 Hz Unity Transport (UDP)

Full per-framework settings including precision values, tick rates, and any modifications made to coexist in the same Unity project are documented in the GitHub repository.