한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Анатомия игровых лагов › L1 Процесс игрового клиента

Ошибка синхронизации часов Clock sync error

ID причины cg-clock · Основной ответственный Команда разработки · Разработка клиента

Открыть карточку в основной версии с иллюстрациями и экспериментами →

Если клиент неверно оценивает серверное время, сбиваются момент интерполяции и проверка кулдаунов.

Почему Время сервера синхронизируется один раз при входе и не корректируется, даже когда меняется пинг → Следствие Момент интерполяции и время окончания кулдауна расходятся с сервером → На экране Противник иногда дёргается, умение отклоняется, хотя кулдаун уже прошёл

Симптомы
Микрофризы, Съеденные действия / роллбэк
Факторы
Задержка
У кого
Только у меня
Когда
Чем дольше без перезапуска, Изредка, случайно
Ответственные
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Регулярно синхронизировать время (измерять время пути туда и обратно и корректировать), подводить часы постепенно, без резких скачков, измерять прошедшее время монотонными часами (monotonic clock) вместо системного времени ПК.
На графике
Плавный рост · ошибка оценки серверного времени
Где смотреть
Регулярно записывать разницу между серверным временем, которое оценил клиент, и серверным временем (номером тика), которое сервер прислал в пакете
Подтверждает
Ошибка растёт со временем после входа или скачком меняется в момент подводки часов ПК, и примерно тогда же растёт число жалоб на отклонённые умения и рывки
Опровергает
Если ошибка остаётся небольшой, а умения всё равно отклоняются, дело в решении сервера или задержке
Чем проверить
Нужны логи и метрики игрового сервера или клиента
Подробнее
Если прошедшее время измерять по дате и времени ПК (wall clock), игровое время скачет в момент, когда Windows подводит часы по интернет-времени или пользователь меняет время вручную. Прошедшее время нужно измерять монотонными часами, которые никогда не идут назад (monotonic clock, Stopwatch и т. п.).

Источники

  1. RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
    Расчёт задержки туда и обратно и расхождения часов по четырём отметкам времени запроса и ответа
  2. Acquiring high-resolution time stamps Microsoft
    QueryPerformanceCounter (его использует Stopwatch): часы для измерения прошедшего времени, не синхронизируемые с внешним временем. Системное время нужно только тогда, когда требуется время UTC
  3. Time synchronization (Netcode for Entities 6.5) Unity
    Серверное время оценивается по времени пути туда и обратно, а подстройка идёт за счёт небольшого изменения скорости хода часов, без резких переводов времени

Смотрите также

Тот же слой: L1 Процесс игрового клиента

Причины с тем же симптомом (Микрофризы) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами