Сетевой код


Сетевой код — это общий термин , который чаще всего используется геймерами в отношении сетевых игр в онлайн-играх , часто имея в виду проблемы синхронизации между клиентами и серверами. Игроки часто делают вывод о «плохих сетевых кодах», когда сталкиваются с проблемами подключения в игре. Некоторые распространенные причины: большая задержка между сервером и клиентом, потеря пакетов , перегрузка сети и внешние факторы, не зависящие от качества сети, такие как время рендеринга кадров или непостоянная частота кадров . [1] [2]

В отличие от локальной игры, где действия всех игроков выполняются мгновенно в одной и той же симуляции или экземпляре игры, в онлайн-игре есть несколько параллельных симуляций (по одной для каждого игрока), где действия соответствующих игроков поступают мгновенно, в то время как входные данные для одного и того же кадра от других игроков приходят с определенной задержкой (большей или меньшей в зависимости от физического расстояния между игроками, качества и скорости сетевых соединений игроков и т.д.). [3] Во время онлайн-матча игры должны получать и обрабатывать ввод игроков в течение определенного времени для каждого кадра (равного 16,66 мс  на кадр при 60  FPS).), и если ввод удаленным игроком определенного кадра (например, кадра номер 10) поступает, когда другой кадр уже запущен (например, в кадре номер 20, 166, 66 мс позже), возникает десинхронизация между симуляциями игроков. . Есть два основных решения для разрешения этого конфликта и обеспечения бесперебойной работы игры:

Классическим решением этой проблемы является использование сетевого кода на основе задержки. Когда входные данные удаленного игрока поступают с опозданием, игра соответствующим образом задерживает вводы локального игрока, чтобы синхронизировать два ввода и запускать их одновременно. Эта дополнительная задержка может быть разрушительной для игроков (особенно при высокой задержке), но в целом изменение не очень заметно. Однако эти задержки могут быть непостоянными из-за внезапных колебаний текущей задержки. Если задержка между игроками превышает установленное буферное окно для удаленного игрока, игра должна ждать, в результате чего экраны «зависают». Это происходит потому, что сетевой код, основанный на задержке, не позволяет продолжать симуляцию до тех пор, пока он не получит входные данные от всех игроков в рассматриваемом кадре. [4]Эта переменная задержка приводит к нестабильности и зависанию по сравнению с игрой в автономном режиме (или с игрой по локальной сети ) и может негативно повлиять на производительность игрока в чувствительных ко времени и динамичных жанрах, таких как файтинги . [5]


Диаграмма выполнения и синхронизации входных данных двух игроков (с пингом между ними 90 мс) в онлайн-игре, использующей сетевой код на основе задержки в одноранговой модели.
Диаграмма выполнения и синхронизации входов двух игроков (с пингом между ними 90 мс) в онлайн-игре, использующей неткод отката в одноранговой модели.