
BandwidthOptimizer
BandwidthOptimizer - мод для оптимизации сетевого трафика на серверах Minecraft с большим количеством модов. Снижает нагрузку на канал за счёт сжатия, кэширования и пакетной обработки данных. Работает на сервере и клиенте, поддерживает Forge, Fabric, NeoForge.
BandwidthOptimizer - это клиент-серверный мод для оптимизации сети, созданный специально для серверов Minecraft с десятками модов. Если вы когда-нибудь запускали сборку с Create, Lightman's Currency или десятком других модов, то знаете, как быстро "летит" трафик. Каждый чанк, каждый механизм, каждая синхронизация - это пакеты, которые могут забить канал и вызвать лаги. BandwidthOptimizer решает эту проблему: сжимает повторяющиеся пакеты, кэширует данные чанков, объединяет мелкие пакеты в батчи и снижает фоновый трафик от неактивных игроков.
Мод работает на принципе "упаковка-восстановление": после того как Minecraft или загрузчик модов сформировал пакет, BandwidthOptimizer может его сжать, закэшировать или объединить с другими. На принимающей стороне пакет восстанавливается до исходного состояния перед тем, как попасть в обычный обработчик Minecraft. Всё прозрачно для игрока.
Ключевые особенности
- Zstd-сжатие с восстановлением потери кадров и синхронизацией потока.
- Синхронизированное отображение повторяющихся структур пакетов (шаблоны и литералы).
- Пакетный батчинг с защитой границ протокола.
- Поддержка трёх типов передачи чанков: полный, референсный и патчевый.
- Кэширование чанков на клиенте - даже после переподключения чанки восстанавливаются из кэша.
- Фоновое обслуживание кэша с ограничением времени жизни и восстановлением при повреждениях.
- Лёгкое и глубокое снижение трафика у неактивных игроков, с полным восстановлением состояния при возвращении.
- Отчёты BO Stats - загружаемая статистика с графиками, историей, распределением пакетов и экономией от режима idle.
- Диагностика для OP - точное трассирование классов пакетов.
- Совместимость с окружениями Create, Velocity, Voxy, AutoFish, Aeronautics и другими сетевыми сборками.
Как это работает (простыми словами)
После того как Minecraft или мод закодировал пакет, BandwidthOptimizer перехватывает его. Он может:
- сопоставить с шаблоном и отправить только ссылку, если такой пакет уже был;
- объединить несколько мелких пакетов в один;
- сжать Zstd;
- или просто пропустить, если пакет уже сжат (например, медиаданные).
Приёмник восстанавливает исходные байты до того, как они попадут в обычный декодер Minecraft. Если какой-то фрейм потерян - система автоматически синхронизируется заново.
Результаты замеров (реальные данные, не гарантии)
Эффективность зависит от сборки, активности игроков и типа пакетов. Ниже - исторические замеры с реальных серверов. Процент показывает, сколько трафика осталось после оптимизации.
HUD-замеры на живом сервере
| Окружение | Оптимизированный трафик клиента | Сервер: сырой → фактический | Оптимизированный серверный | Прямой трафик | Игроки | Источник |
|---|---|---|---|---|---|---|
| Create Delight Remake сервер 1 | 23.21 MB → 3.93 MB (16.9%) | 305.35 GB → 51.12 GB (16.7%) | 40.28 GB (13.2%) | 49.46 GB (16.2%) | 1 | HUD snapshot, v2.7.6.10 |
| Create Delight Remake сервер 2 | 24.51 MB → 4.15 MB (16.9%) | 516.70 GB → 83.24 GB (16.1%) | 57.57 GB (11.1%) | 57.01 GB (11.0%) | 4 | HUD snapshot, v2.7.6.10 |
Замеры управляемого транспорта
| Окружение | Управляемый трафик | Без потоков WATUT/YSM | Примечания |
|---|---|---|---|
| Create-сервер (ядро) | 38976.09 MiB → 9455.03 MiB (24.3%) | 34580.44 MiB → 5236.56 MiB (15.1%) | Смешанный трафик, включая плохо сжимаемые данные |
| Create-сервер (зеркало) | 1046.16 MiB → 253.89 MiB (24.3%) | 902.82 MiB → 113.55 MiB (12.6%) | Меньшая выборка с видимым трафиком WATUT |
| Create-тестовый сервер | 1174.31 MiB → 112.24 MiB (9.6%) | Та же выборка | Без исключений WATUT/YSM в этой выборке |
| Create Delight | 7865.72 MiB → 1622.43 MiB (20.6%) | 7774.54 MiB → 1539.90 MiB (19.8%) | Публичная сборка, отчёт с источника |
| Create Delight (второй снимок) | 4567.66 MiB → 603.15 MiB (13.2%) | Не разделено | Более ранний отчёт |
Самые "жирные" пакеты
| Источник | Окружение | Сырой объём | Фактически передано | Соотношение |
|---|---|---|---|---|
ClientboundLevelChunkWithLightPacket | Create-сервер (ядро) | 9062.88 MiB | 481.85 MiB | 5.3% |
ClientboundLevelChunkWithLightPacket | Create-тестовый сервер | 713.65 MiB | 16.84 MiB | 2.4% |
ClientboundTabListPacket | Create-сервер (ядро) | 6354.97 MiB | 655.45 MiB | 10.3% |
lightmanscurrency:network | Create-сервер (ядро) | 8206.80 MiB | 593.69 MiB | 7.2% |
create:deployer block entity data | Create Delight | 510.41 MiB | 71.61 MiB | 14.0% |
Примеры, где сжатие почти не помогает
Некоторые пакеты уже сжаты, зашифрованы или содержат случайные данные - вторая степень сжатия даёт лишь 1-10%.
| Источник | Окружение | Сырой объём | Фактически передано | Соотношение | Путь |
|---|---|---|---|---|---|
watut:main | Create-сервер (ядро) | 4157.94 MiB | 3974.80 MiB | 95.6% | BATCH_DIRECT_FALLBACK |
yes_steve_model:2_6_0 | Create-сервер (ядро) | 514.63 MiB | 510.50 MiB | 99.2% | BATCH_TRANSPORT_SHARE |
watut:main | Create-сервер (зеркало) | 146.07 MiB | 143.07 MiB | 97.9% | BATCH_TRANSPORT_SHARE |
watut:main | Create Delight | 91.18 MiB | 82.53 MiB | 90.5% | BATCH_TRANSPORT_SHARE |
Текущие замеры (версия 5.10.30.99) показывают, что управляемый трафик сжимается до 3-11% от исходного размера. Но это не гарантировано для каждого сервера - итоговое соотношение зависит от состава пакетов.
Если на сервере есть моды, которые генерируют аномальные пакеты, BandwidthOptimizer может не дать значительного эффекта. В таком случае администратор может запустить /bandwidthoptimizer stats и получить отчёт BO Stats, чтобы найти источник.
Как воспроизвести замеры
- Установите одну версию BandwidthOptimizer на сервер и все клиенты.
- Запустите фиксированный сценарий (например, многократное перемещение по чанкам, работа с механизмами).
- Выполните
/bandwidthoptimizer statsи сохраните ссылку на отчёт. - Сравните управляемый трафик отдельно от прямого и обходного.
- Запишите сборку, загрузчик, версию Minecraft, количество игроков, длительность и версию мода.
Тестированные окружения
Совместимость проверялась на сборках: Create Delight, Brass Concerto, Aeronautics, Mechanomania. Для Mechanomania нет полного замера сжатия, но есть данные об обходных путях. Это не гарантирует работу на любой комбинации модов.
Поддерживаемые версии
| Загрузчик | Minecraft | Статус |
|---|---|---|
| Forge | 1.19.2 | Релиз |
| Forge | 1.20.1 | Релиз |
| Fabric / Quilt | 1.20.1 | Релиз; требуется Fabric API |
| Fabric / Quilt | 1.21.1 | Релиз; требуется Fabric API |
| NeoForge | 1.21.1 | Релиз |
| NeoForge | 26.1.2 | Релиз |
| NeoForge | 26.2 | Бета |
Установка
- Скачайте версию под вашу версию Minecraft и загрузчик.
- Поместите JAR в папку
modsна сервере. - Установите ту же самую версию на каждый клиент.
- Для Fabric/Quilt потребуется Fabric API.
- Перезапустите сервер и клиенты.
Команды
| Команда | Назначение |
|---|---|
/bandwidthoptimizer hud | Включить/выключить HUD со статистикой на клиенте. |
/bandwidthoptimizer stats | Загрузить отчёт сервера и получить ссылку на BO Stats. Только для OP. |
/bandwidthoptimizer debug | Открыть инструменты диагностики по запросу. Только для OP. |
BO Stats
Если вы администратор, выполните /bandwidthoptimizer stats. Вы получите ссылку на страницу bostats.torqueflux.com, где отображаются общие данные сервера, трафик по игрокам и временным периодам, поведение кэша, распределение пакетов по источникам, обходные пути и экономия от idle-режима. При проблемах с подключением или совместимостью приложите эту ссылку вместе с логами клиента, сервера и прокси.
Конфигурация
По умолчанию настройки подходят для большинства серверов и сборок. Опытные администраторы могут изменить клиентские и общие конфиги после того, как соберут отчёты BO Stats до и после изменений.
Скачайте BandwidthOptimizer и забудьте о том, что канал забит чанками и механизмами - даже на самой тяжёлой сборке.
