Using server timestamp to synchronize actions across clients



tl;dr

The question is rather simple: how unsynchronized can internal clocks be between different machines?


Context

We have a "hybrid" approach where the Clients are authoritative on certain things, and the Server on some others. That is to make our life easier because the gameplay doesn’t need to be too tight about certain things.

In this case, the Server will pre-determine a sequence of Enemy Types to be spawned at different locations with pre-determined delay between the spawns. We would then let the Clients handle the rest during the gameplay.

However, if we want the Clients to be mostly synched on the display of the enemies, they would need to initiate this sequence at the very same time, and thus we cannot rely on the network to have transmitted the data at the very same time for all Clients.

The idea we had was to send a timestamp of the format returned by System.currentTimeMillis() which would indicate when to begin the sequence.

But then one question remains in the way: how unsynchronized can internal clocks be between different machines?