Every object in Arma has a locality: the client that owns it. This can be the server, a headless client or a player client. The locality of the object determines where the following calculations happen for that specific object:
- Hit registration
- Physics (vehicle steering, collisions,…)
- AI behaviour (movment, spotting,…)
Why care about locality
All objects that are non-local (except for a special type called "local only" objects) have to be synchronized to all other clients to exist. This means they need to be sent to the server, and then from the server to all other clients. The longer this takes, the more “out of sync” the object becomes on other clients, causing issues like bad hit registration and teleporation.
Another thing to keep in mind is that some scripts require to be run where the object is local to work, or some only work when the locality is the server. This is the reason for the three options:
- Global execution: run on all clients
- Local execution: run on the client that owns the object
- Server execution: run on the server
Headless clients
As stated above, AI behaviour runs on the client that owns the AI object. This explains how headless clients help achieve better server performance, as the AI calculations can be offloaded to another client.
However with this performance boost, comes a tradeoff: it takes longer to sync the object to the player clients, as the sync path is now HC<->server<->player instead of just server<->player. To minimize the impact of this, headless clients need to be run on the same physicial machine as the server, so that network latency is nearly 0.