So overall, the site including the buzzer page uses websockets for (close to) real-time client-server communication.
Obviously latency can be an issue, so my non-perfect B+ solution is to essentially calculate the round trip of the buzz, divide it by 2, and subtract it from the server time.
client ------------ pingTime ------------> server
client <----------- serverTime ----------- server
roundTrip = pingTime + pongTime
buzzTime = serverTime - (roundTrip / 2);
The server time is always the source of truth since client times can vary. Not using NTP which could possibly be more accurate.
Obviously latency can be an issue, so my non-perfect B+ solution is to essentially calculate the round trip of the buzz, divide it by 2, and subtract it from the server time.
client ------------ pingTime ------------> server
client <----------- serverTime ----------- server
roundTrip = pingTime + pongTime
buzzTime = serverTime - (roundTrip / 2);
The server time is always the source of truth since client times can vary. Not using NTP which could possibly be more accurate.