Когда игрок телепортируется в город, полный людей, сервер должен разом отправить внешность, экипировку и состояние сотен персонажей, которые стали видны.
Почему Игрок внезапно оказывается в людном месте после телепорта, входа в игру или смены канала → Следствие Полные данные по сотням персонажей собираются и отправляются за раз, и ПК игрока тоже загружает их разом → На экране Сразу после прибытия короткий фриз, персонажи появляются с опозданием по одному, ввод запаздывает
В движении и при смене локации, Сразу после входа или техработ
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента
Команда разработки: задачи
Сервер: отправлять в порядке близости, распределяя по нескольким тикам, кэшировать данные о внешности. Клиент: получать данные заранее, пока идёт экран загрузки, создавать полученных персонажей, распределяя по нескольким кадрам.
Цифры для ориентира
Если внешность, экипировка и баффы одного персонажа занимают 300 байт, то на 500 персонажей это около 150 KB. В один момент наваливается в десятки раз больше, чем обычно отправляется за тик (единицы KB).
На графике
Всплеск сразу после входа или техработ · исходящие байты по соединениям, время кадра на клиенте
Где смотреть
Смотреть число байтов и пакетов, отправленных по соединению за первые секунды после прибытия в людное место (лог сервера), и время кадра на клиенте (нетграф, лог клиента)
Подтверждает
Сразу после прибытия исходящий трафик по соединению взлетает в десятки раз выше обычного тика и затем спадает, и в тот же момент скачет время кадра на клиенте
Опровергает
Если фриз такой же и при переходе в безлюдное место, дело в переходе между зонами (передаче на другой сервер) или в загрузке на клиенте
Чем проверить
Нужны логи и метрики игрового сервера или клиента
Источники
Detailed Actor Replication Flow in Unreal EngineEpic Games При первом открытии actor channel вместе с ним отправляются начальные данные вроде позиции и поворота, а если соединение забито, остальные акторы откладываются до следующего тика
Actor Priority in Unreal EngineEpic Games Приоритет назначается по расстоянию и направлению взгляда, и сначала отправляются близкие и видимые акторы