Синхронизация времени между простым сервером на основе python-сокетов и клиентами

У меня есть начало небольшой многопользовательской игры, которую я пишу на python в качестве учебного упражнения. В настоящее время сервер работает со скоростью 10 кадров в секунду, в то время как клиенты работают с любой скоростью. Это хорошо работает для сохранения пропускной способности, но если клиент не сообщает серверу, когда его вход произошел, все входные данные квантуются до интервалов 100ms. Как синхронизировать время между клиентом и сервером, чтобы внести эти исправления? Основным препятствием здесь является то, что мне нужно определить пинг раз и компенсировать их.

2 ответов


Я случайно наткнулся на мучительно прекрасное сообщение в блоге о том, как делать физику распределенной сети в целом (без традиционного прогнозирования клиента). Я настоятельно рекомендую его вместе с слайдами GDC, представленными Фидлером пару лет назад. Удачи!


Это очень интересный вопрос. К сожалению, простого ответа нет. Вам просто нужно хорошо понять проблему и согласиться на решение, которое достаточно для вашего приложения.

моим первым инстинктом было то, что протокол сетевого времени (NTP) для установки машинных часов с серверов NTP была бы решена эта проблема. Один из затронутых там вопросов касается Джиттер Буфера, которая включает задержка пакетов вариация. Это подробно описано в RFC 3393; Метрика изменения задержки IP-пакетов для метрик производительности IP (IPPM).