Skip to content

fix(ioServer): send current frame in ping for client clock sync - #9

Open
andreolli-davide wants to merge 1 commit into
unitn-ASA:masterfrom
andreolli-davide:master
Open

fix(ioServer): send current frame in ping for client clock sync#9
andreolli-davide wants to merge 1 commit into
unitn-ASA:masterfrom
andreolli-davide:master

Conversation

@andreolli-davide

Copy link
Copy Markdown

The ping payload emitted lastLatencyData.frame, the frame captured at the previous pong, so it lagged the true frame by ~PING_INTERVAL/CLOCK ticks plus round-trip. Clients anchor their interpolated tick to this frame (anchorFrame = data.frame at receive-time), so the lag skewed every client's tick, and by a different amount per client (independent ping phase + RTT), breaking cross-agent tick comparison.

Emit frameAtPing (the frame at emit time) instead. roundTrip stays the previous measurement, which is correct: this ping's RTT is unknown until its pong returns. The latency monitor reads lastLatencyData and is unaffected.

The ping payload emitted lastLatencyData.frame, the frame captured at the
previous pong, so it lagged the true frame by ~PING_INTERVAL/CLOCK ticks
plus round-trip. Clients anchor their interpolated tick to this frame
(anchorFrame = data.frame at receive-time), so the lag skewed every
client's tick — and by a different amount per client (independent ping
phase + RTT), breaking cross-agent tick comparison.

Emit frameAtPing (the frame at emit time) instead. roundTrip stays the
previous measurement, which is correct: this ping's RTT is unknown until
its pong returns. The latency monitor reads lastLatencyData and is
unaffected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant