Продолжаем разбор технического фундамента экосистемы Realistic Farming. Мод NetworkSync отвечает за сетевую синхронизацию в мультиплеере, то есть за то, чтобы данные всех сопутствующих модов корректно и без лишней нагрузки передавались между сервером и клиентами. Для рядового игрока этот мод полностью прозрачен, но без него сетевая часть Realistic Farming попросту не работала бы слаженно.
Место в экосистеме и суть
NetworkSync - это сетевая основа многопользовательской экосистемы Realistic Farming и второй по порядку загрузки мод в связке (сразу после StateLedger). Его задача - заменить собственные сетевые классы каждого сопутствующего мода единым механизмом пакетной синхронизации.
Работает это так: моды регистрируют свою схему данных и вызывают markDirty, когда состояние меняется, а NetworkSync сериализует эти данные, объединяет их в пакеты с частотой 1 Гц и доставляет клиентам. Выгода очевидна - трафик в мультиплеере заметно сокращается, а заодно исчезает раздражающий «эффект резинки» между модами, который раньше возникал из-за того, что каждый мод синхронизировался по собственному таймеру. Как и другие сервисные компоненты сборки, мод не имеет настроек: его достаточно установить, оставить загруженным и позволить остальным модам им пользоваться.
Как это работает под капотом
Для сопутствующих модов предусмотрена простая схема регистрации, защищённая на случай отсутствия NetworkSync. Мод регистрируется один раз при инициализации и задаёт два обратных вызова: onWriteState выполняется на сервере и возвращает строгий массив с целочисленной индексацией, а onReadState исполняется на клиенте и применяет тот же массив. Каждая запись состояния выполняется в защищённой обёртке - если один модуль даёт сбой, он просто пропускается в текущем тике, не затрагивая остальные.
Отдельно продумана обратная совместимость: при расширении схемы новые поля добавляются только в конец массива, никогда в середину, чтобы старые клиенты, получившие более короткий массив, спокойно игнорировали недостающую часть. Важный принцип - markDirty вызывается только при реальном изменении состояния, а не в каждом кадре, ведь цикл на 1 Гц всё равно объединяет все «грязные» модули в один пакет.
Один из грамотных инженерных моментов - то, как передаются значения. Каждый элемент массива снабжается однобайтовым тегом типа: логические значения идут как bool, целые числа в 32-битном диапазоне - как точные int32, остальные числа - как float32, а строки как строки. Благодаря этому деньги, счётчики и идентификаторы передаются без потери точности, тогда как единый массив из float32 такую точность бы «съел». При этом пакеты остаются компактными.
Синхронизация при подключении
Отдельно решён вопрос игроков, заходящих в середине сессии. Когда клиент подключается, он запрашивает у сервера полный снимок состояния (с повторными попытками, пока соединение не готово), а сервер передаёт текущее состояние каждого зарегистрированного модуля. После этого клиент получает уже только обновления изменений с частотой 1 Гц. А для случаев, когда изменение должно дойти мгновенно, не дожидаясь секундного цикла - например, настройка администратора, применённая на сервере, - предусмотрен вызов syncNow.
Одиночная игра и диагностика
В синглплеере мод фактически бездействует: цикл обработки пакетов запускается, но никому ничего не транслирует. Для диагностики есть консольная команда nsStatus, которая выводит список зарегистрированных модулей, локальную роль (сервер или клиент) и флаги изменений.
NetworkSync - это надёжный сетевой хребет всей многопользовательской части Realistic Farming. Единый механизм пакетной синхронизации вместо разрозненных таймеров каждого мода, точная передача чисел без потерь, корректная обработка подключений в середине игры и продуманная система серверных действий делают его по-настоящему инженерно грамотным решением. Для игрока мод незаметен и не требует настройки - ставится один раз и работает, - но именно на нём держится стабильность и отзывчивость сетевой игры на базе Realistic Farming.
Мод «Network Sync» для Farming Simulator 25
Скачать мод Network Sync
Версия
v 2.0.0.0
Версия игры:
Не указана

Комментарии
Пока что никто не оставил комментария к этому материалу. Ты можешь быть первым!