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

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

Отказ сервера после опережающего фидбека Client-side feedback rejected by server

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

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

Если сервер потом не засчитывает удар или умение, которые экран игрока уже показал, результат, который игрок точно видел, отменяется.

Почему Эффект удара и анимация умения проигрываются до подтверждения сервера (опережающий фидбек) → Следствие Сервер заново проверяет дальность, позицию цели, кулдаун и ресурсы и отклоняет действие → На экране Кровь брызнула, а урона нет; анимация умения проиграна, а эффекта нет; запустился только кулдаун

Симптомы
Съеденные действия / роллбэк, Откидывание назад
Факторы
Задержка
У кого
Только у меня, Только одна функция
Когда
При определённом действии
Ответственные
Основной ответственный Команда разработки · Разработка клиента · Совместно Команда разработки · Разработка сервера
Команда разработки: задачи
Клиент: по результату сервера показывать только то, что требует подтверждения (цифры урона, смерть, награды), частые причины отказа проверять заранее, при отказе возвращать кулдаун и ресурсы и показывать причину. Сервер: давать запас на пинг при проверке дальности и позиции цели, отправлять причину в ответе с отказом, собирать долю отказов по умениям в метрики.
Цифры для ориентира
Отказ приходит с опозданием на пинг плюс ожидание тика после нажатия. При пинге 150 ms игрок около 0,2 с считает, что попал.
На графике
Высоко только у некоторых · доля отказов сервера по умениям (по диапазонам пинга)
Где смотреть
Собирать на сервере долю отказов по умениям и причины отказов (дальность, позиция цели, кулдаун, ресурсы) в разбивке по диапазонам RTT игроков. На клиенте записывать, сколько раз действия с опережающим фидбеком были отклонены
Подтверждает
Отказы сосредоточены на отдельных умениях и причинах «дальность» и «позиция цели», и с ростом пинга доля отказов растёт
Опровергает
Если причина отказа кулдаун или ресурсы и от пинга это не зависит, проверить, не расходятся ли значения данных (кулдаун, стоимость) у клиента и сервера. Если отказов нет, а анимация начинается только после ответа сервера, это причина «Отклик только после ответа сервера (модель запрос-ответ)»
Чем проверить
Нужны логи и метрики игрового сервера или клиента
Подробнее
Опережающий фидбек лучше всего скрывает пинг. Но чем сильнее расходятся данные, по которым решают клиент и сервер (позиция противника, оставшиеся ресурсы), тем чаще отказы. Если собирать долю отказов по умениям в метрики, места, где проверки расходятся, легко найти.

Источники

  1. Using Gameplay Abilities in Unreal Engine Epic Games
    Способности Local Predicted сразу выполняются на клиенте, но окончательно решает сервер, и он может отменить результат
  2. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    Выстрел предсказывается на клиенте и эффект проигрывается заранее, а ошибка предсказания исправляется по результату сервера

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

Тот же слой: Архитектура синхронизации

Причины с тем же симптомом (Съеденные действия / роллбэк) на других слоях

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