<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/how-to-think-about-game-servers-pt-2---hernan-rivas-acosta-erlang-solutions-webinar-kuzpbm8qr" -->

---
title: How to Think About Game Servers (Pt 2)- Hernan Rivas...
description: A follow-up webinar on building multiplayer game netcode covers clock synchronization between client and server using an NTP-inspired approach over...
canonical: https://daily.dev/posts/how-to-think-about-game-servers-pt-2---hernan-rivas-acosta-erlang-solutions-webinar-kuzpbm8qr
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: How to Think About Game Servers (Pt 2)- Hernan Rivas Acosta| Erlang Solutions Webinar | daily.dev
og:description: A follow-up webinar on building multiplayer game netcode covers clock synchronization between client and server using an NTP-inspired approach over...
og:url: https://daily.dev/posts/how-to-think-about-game-servers-pt-2---hernan-rivas-acosta-erlang-solutions-webinar-kuzpbm8qr
og:image: https://api.daily.dev/og/posts/kUZPBm8qr.png
og:image:alt: How to Think About Game Servers (Pt 2)- Hernan Rivas Acosta| Erlang Solutions Webinar
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Think About Game Servers (Pt 2)- Hernan Rivas Acosta| Erlang Solutions Webinar

**[Planet Erlang](https://daily.dev/sources/planeterlang)** · 53 min read · 0 upvotes · 0 comments

## Summary

A follow-up webinar on building multiplayer game netcode covers clock synchronization between client and server using an NTP-inspired approach over WebSockets/TCP, then walks through live code demos of several lag-compensation strategies: naive send-and-forward, input delay, hard teleportation, smooth teleport with a ghost simulation, and a combined smooth-teleport-plus-input-delay approach. The presenter simulates variable ping and jitter (log-normal distribution) to show how each technique behaves under different latency conditions, references real games (Doom, Age of Empires, Forza Horizon, Trackmania) as examples of these approaches, and shares the demo code on GitHub along with suggestions for further improvements like angle-based blending, interpolation-only strategies for remote cars, and adding collisions.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.youtube.com/watch?v=IN3dTJz2ZFQ>

## Questions this post answers

### How do you synchronize the clock between a game client and server for multiplayer netcode?

Use an NTP-inspired approach over your existing connection: send a client timestamp to the server, have it reply with both the original timestamp and its own server time, then assume the round trip is split evenly and compute the offset as server time minus the average of the send and receive timestamps. Take around 15 samples over a few seconds and use the sample with the lowest round-trip time for the best accuracy, since minimizing RTT minimizes the sync error. Achieved sub-millisecond to a few milliseconds of accuracy in testing, plenty for tick-based games at 25-40ms tick intervals.

_daily.dev surfaces netcode techniques like this for developers architecting real-time multiplayer synchronization._

### What's the difference between naive netcode, input delay, and teleportation lag compensation in multiplayer games?

Naive netcode sends input to the server and applies it locally with no compensation, which is what the original 1994 Doom used, working fine on LAN but poorly over the internet due to desynchronization. Input delay waits to apply actions until the expected server round trip has passed (used by Age of Empires), reducing desync but feeling unresponsive above roughly 50ms ping. Teleportation snaps a client's position to the server's authoritative state whenever they diverge, guaranteeing eventual correctness but causing visible jumps; smoothing this teleport toward a 'ghost' position, and combining it with input delay, gives noticeably better results, which is closer to what real racing games u

_Compare these lag-compensation approaches on daily.dev before choosing one for your multiplayer game._

### Why does simulating network ping with a fixed delay give inaccurate results when testing multiplayer game netcode?

A fixed delay only reproduces latency, not jitter, and jitter is what actually breaks synchronization between clients. Real-world ping variation follows a log-normal distribution, skewed so most delay is low but occasional spikes occur; simulating ping this way, rather than as a constant offset, is necessary to see realistic desynchronization effects like the ones affecting input delay and teleport smoothing techniques.

_daily.dev helps developers testing multiplayer game latency track realistic simulation techniques like this._

## Similar posts on daily.dev

- [How to Think About Game Servers \(Pt 2\)- Erlang Solutions](https://daily.dev/posts/how-to-think-about-game-servers-pt-2---erlang-solutions-ritrnabyg) · Erlang Forums · 0 upvotes · 0 comments
- [Clock Synchronization Is a Nightmare](https://daily.dev/posts/clock-synchronization-is-a-nightmare-uxf2ft5vt) · Hacker News · 2 upvotes · 0 comments
- [Hardening Real-Time Matching Systems with Node.js and WebSockets](https://daily.dev/posts/hardening-real-time-matching-systems-with-node-js-and-websockets-niwsqbayc) · SitePoint · 0 upvotes · 0 comments
- [WebSockets vs. SSE should be about ordering and correctness](https://daily.dev/posts/websockets-vs-sse-should-be-about-ordering-and-correctness-anliqz3yb) · Dashbit · 2 upvotes · 2 comments

---

Tags: [#webdev](https://daily.dev/tags/webdev)

[View this post on daily.dev](https://daily.dev/posts/how-to-think-about-game-servers-pt-2---hernan-rivas-acosta-erlang-solutions-webinar-kuzpbm8qr)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"How to Think About Game Servers (Pt 2)- Hernan Rivas Acosta| Erlang Solutions Webinar","url":"https://daily.dev/posts/how-to-think-about-game-servers-pt-2---hernan-rivas-acosta-erlang-solutions-webinar-kuzpbm8qr","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/how-to-think-about-game-servers-pt-2---hernan-rivas-acosta-erlang-solutions-webinar-kuzpbm8qr"},"datePublished":"2026-08-18T07:37:00.610Z","dateModified":"2026-08-18T07:37:27.292Z","description":"A follow-up webinar on building multiplayer game netcode covers clock synchronization between client and server using an NTP-inspired approach over...","image":"https://i.ytimg.com/vi/IN3dTJz2ZFQ/sddefault.jpg","thumbnailUrl":"https://i.ytimg.com/vi/IN3dTJz2ZFQ/sddefault.jpg","isAccessibleForFree":true,"articleSection":"Planet Erlang","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Planet Erlang","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1634553563/logos/noimage","url":"https://daily.dev/sources/planeterlang"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/how-to-think-about-game-servers-pt-2---hernan-rivas-acosta-erlang-solutions-webinar-kuzpbm8qr","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"webdev","timeRequired":"PT53M","video":{"@type":"VideoObject","name":"How to Think About Game Servers (Pt 2)- Hernan Rivas Acosta| Erlang Solutions Webinar","description":"A follow-up webinar on building multiplayer game netcode covers clock synchronization between client and server using an NTP-inspired approach over...","thumbnailUrl":"https://i.ytimg.com/vi/IN3dTJz2ZFQ/sddefault.jpg","uploadDate":"2026-08-18T07:37:00.610Z","duration":"PT53M","url":"https://api.daily.dev/r/kUZPBm8qr","embedUrl":"https://www.youtube.com/embed/IN3dTJz2ZFQ"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Planet Erlang","item":"https://daily.dev/sources/planeterlang"},{"@type":"ListItem","position":3,"name":"How to Think About Game Servers (Pt 2)- Hernan Rivas Acosta| Erlang Solutions Webinar"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/how-to-think-about-game-servers-pt-2---hernan-rivas-acosta-erlang-solutions-webinar-kuzpbm8qr#faq","mainEntity":[{"@type":"Question","name":"How do you synchronize the clock between a game client and server for multiplayer netcode?","acceptedAnswer":{"@type":"Answer","text":"Use an NTP-inspired approach over your existing connection: send a client timestamp to the server, have it reply with both the original timestamp and its own server time, then assume the round trip is split evenly and compute the offset as server time minus the average of the send and receive timestamps. Take around 15 samples over a few seconds and use the sample with the lowest round-trip time for the best accuracy, since minimizing RTT minimizes the sync error. Achieved sub-millisecond to a few milliseconds of accuracy in testing, plenty for tick-based games at 25-40ms tick intervals. daily.dev surfaces netcode techniques like this for developers architecting real-time multiplayer synchronization."}},{"@type":"Question","name":"What's the difference between naive netcode, input delay, and teleportation lag compensation in multiplayer games?","acceptedAnswer":{"@type":"Answer","text":"Naive netcode sends input to the server and applies it locally with no compensation, which is what the original 1994 Doom used, working fine on LAN but poorly over the internet due to desynchronization. Input delay waits to apply actions until the expected server round trip has passed (used by Age of Empires), reducing desync but feeling unresponsive above roughly 50ms ping. Teleportation snaps a client's position to the server's authoritative state whenever they diverge, guaranteeing eventual correctness but causing visible jumps; smoothing this teleport toward a 'ghost' position, and combining it with input delay, gives noticeably better results, which is closer to what real racing games u Compare these lag-compensation approaches on daily.dev before choosing one for your multiplayer game."}},{"@type":"Question","name":"Why does simulating network ping with a fixed delay give inaccurate results when testing multiplayer game netcode?","acceptedAnswer":{"@type":"Answer","text":"A fixed delay only reproduces latency, not jitter, and jitter is what actually breaks synchronization between clients. Real-world ping variation follows a log-normal distribution, skewed so most delay is low but occasional spikes occur; simulating ping this way, rather than as a constant offset, is necessary to see realistic desynchronization effects like the ones affecting input delay and teleport smoothing techniques. daily.dev helps developers testing multiplayer game latency track realistic simulation techniques like this."}}]}
```

