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

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

Узкое место: обработка пакетов в главном потоке Network processing on the main thread

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

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

Если за кадр обрабатывается только фиксированное число полученных пакетов, при наплыве пакеты всё время переносятся на следующие кадры.

Почему В людном месте приходят тысячи обновлений в секунду → Следствие Главный поток упирается в лимит обработки на кадр и не успевает всё прочитать → На экране Движения других игроков отображаются всё позже и пачками

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

Источники

  1. Actor Priority in Unreal Engine Epic Games
    Когда пропускной способности не хватает, акторы реплицируются не все и не каждый раз: приоритет определяется по расстоянию до наблюдателя и времени с последней репликации
  2. Replication Graph in Unreal Engine Epic Games
    В играх с большим числом игроков и реплицируемых объектов (MMORPG и т. п.) объекты группируют по местоположению и отправляют только нужные, иначе CPU сервера становится узким местом

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

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

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

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