
Raknetify: Устранение задержек в Minecraft на ненадёжных сое
raknetify (RelativityMC/raknetify)
Мод Fabric, плагин Velocity и BungeeCord, использующие RakNet для значительного улучшения многопользовательского опыта при ненадёжных и ограниченных соединениях.
Сидите на сервере Minecraft с пингом, скачующимся между 150мс и 2000мс на вашем домашнем интернете или застряли на ограниченном мобильном хостинге? Raknetify решает именно эту проблему, заменяя стандартное TCP-соединение на многоканальный протокол RakNet, который приоритизирует критические игровые пакеты и повторно отправит неудачные пакеты умно. Если у вас хорошее соединение, вы ничего не заметите. Если нет, это действительно может изменить ощущение игрового процесса.
Что делает этот проект
Raknetify не волшебная палочка, ликвидирующая задержки. Он реорганизирует, как Minecraft отправляет и получает данные, чтобы проблемы качества соединения меньше вас беспокоили. Обычно Minecraft отправляет всё через один поток TCP. Это означает, что одна потерянная пакет может вызвать каскад задержек при синхронизации клиента и сервера. RakNet, сетевая библиотека, которая питает Minecraft Bedrock и многие другие игры, использует несколько каналов с приоритетом вместо этого. Критические пакеты, такие как обновления позиции игрока, получают свой собственный канал, в то время как менее срочные вещи (например, анимация удалённого игрока) могут подождать.
Результатом является более низкая воспринимаемая задержка и меньше блокировок кадров, особенно заметно, когда вы находитесь на домашнем соединении, которое ограничено, или где-либо с существенной потерей пакетов. Вы также можете добавить префикс к адресу сервера `raknet;` (или `raknetl;` для другого настройки MTU) и подключиться напрямую, что очень просто. Мод и плагин версии существуют, поэтому, будь то прокси на основе vanilla (Velocity или BungeeCord) или сервер Fabric, у вас есть варианты.
Когда вам нужен Raknetify
Честно говоря, большинство игроков со стабильным домашним интернетом и приличным ISP не заметят драматических улучшений. Вы установите Raknetify, если попадаете в одну из этих категорий:
- Вы играете через мобильный хостинг. Данные сотовой сети по своей природе ненадёжны, с пиками потерь пакетов во время интенсивного использования. Логика повторной отправки Raknetify справляется с этим намного лучше, чем стандартный TCP.
- Ваш ISP ограничивает вас. Некоторые домашние сети имеют ограничения на соединение или по IP, которые делают многопользовательскую игру застревать. Многоканальная приоритизация помогает здесь.
- Вы управляете сервером, расположенным на большом расстоянии. Высокий абсолютный пинг плох, но если он стабилен, стандартный Minecraft справляется с этим хорошо. Но если это высокопинговое соединение также потеряно (спутниковое, подводные кабели, межконтинентальные прыжки), Raknetify уменьшает задержки повторной передачи.
- Вы управляете прокси, например, Velocity или BungeeCord, и хотите поддержать игроков с плохими соединениями. Установка на стороне сервера означает, что вся ваша база игроков получает выгоду без необходимости модифицировать клиентов (хотя установка на стороне клиента более эффективна).
И если вы находитесь в регионе с действительно плохой инфраструктурой интернета, это стоит попробовать. Переносимость минимальна, и поскольку это заменяемый мод, в худшем случае вы просто удалите его, если он не поможет.
Установка и настройка
Процесс установки прост, но есть несколько предварительных требований, о которых следует знать заранее.
Прежде чем начать: Raknetify требует Minecraft 1.17.1 или новее (几乎 все современные версии, хотя старые серверы 1.16 не повезло). И вот неочевидная часть: ваш сервер нуждается в открытом порту UDP под тем же номером, что и ваш обычный серверный порт. Если ваш сервер работает на порту 25565, вам нужен открытый UDP-порт 25565. Проверьте свой брандмауэр и правила перенаправления портов перед установкой.
Для серверов Fabric: Загрузите последний релиз с Modrinth или GitHub. Скопируйте его в папку с модами на сервере и клиенте. Перезапустите сервер и клиент, затем подключитесь, добавив префикс к адресу сервера: `raknet;mc.example.com` вместо `mc.example.com`. Всё.
# Пример: подключение к серверу Fabric с Raknetify
# В меню многопользовательской игры добавьте сервер:
# Имя: Мой Сервер
# Адрес: raknet;mc.example.com
# Порт: (оставьте пустым, по умолчанию 25565)
Для прокси Velocity или BungeeCord: Скачайте версию плагина (доступна на SpigotMC для BungeeCord, Modrinth для Velocity). Установите его в папку с плагинами, перезапустите прокси, и всё готово. Клиенты, подключающиеся через ваш прокси, автоматически получат выгоду. Установите его также на стороне клиента для лучших результатов.
Если вы хотите попробовать разработочные сборки до официального релиза, сервер CodeMC CI хостит их. Это полезно, если была сообщена ошибка и исправлена, но ещё не выпущена официально.
Как работает система многоканальных каналов
Секретный ингредиент - приоритизированные каналы RakNet. Вместо одного TCP-соединения, несущего весь трафик, Raknetify создаёт несколько виртуальных каналов с разными приоритетами. Ваши позиция игрока, поворот и взаимодействие с блоками получают высокий приоритет. Эффекты частиц, анимации удалённых мобов и сообщения чата получают более низкий приоритет. Когда происходит потеря пакетов на ненадёжном соединении, низкоприоритетный трафик отбрасывается, а не ваши обновления движения.
Например: вы на споттом мобильном хостинге, и именно в момент, когда начинается загрузка чанка, рядом с вами телепортируются 20 других игроков. Стандартный Minecraft, возможно, поставит все эти сообщения в очередь и заблокирует ваш экран на полсекунды, пока TCP пытается повторно отправить потерянные пакеты в порядке. Raknetify отбросит некоторые эффекты частиц и анимации удалённых игроков, но сохранит ваше движение гладким, поскольку этот трафик изолирован в канал с более высоким приоритетом.
Ещё есть вариант MTU (максимальное транспортное единица). Если вы на сети с агрессивной фрагментацией пакетов, использование `raknetl;` вместо `raknet;` устанавливает более высокий MTU, который может уменьшить накладные расходы в некоторых случаях. README не глубоко исследует, когда использовать каждый, поэтому это в основном проб и ошибка, если у вас возникнут трудности.
Поддержка ViaVersion (кросс-версионные соединения)
Raknetify работает вместе с ViaVersion, если вы управляете прокси, поддерживающим старые или новые клиентские версии. Если вы проксируете сервер 1.20.1, но хотите, чтобы клиенты 1.21 могли подключиться, ViaVersion переводит протокол. Raknetify хорошо работает в этом.setup. Просто установите оба, и всё готово.
Однако есть одна нюанс: если вы запускаете Raknetify на прокси (Velocity/BungeeCord) и подключается не поддерживаемая клиентская версия (например, древний клиент 1.8 на сервере 1.21), Raknetify может не активировать многоканальный режим. Вы вернётесь к стандартному TCP, что отменяет цель. Это указано в README, но легко упустить из виду. Если ваш прокси обслуживает много устаревших версий, сначала протестируйте этот сценарий.
Что может пойти не так и что сбивает с толку
Большинство проблем с Raknetify возникают из-за пропущенных предварительных требований, а не самого мода.
- Порт UDP не открыт. Это наиболее распространённая проблема. Если клиенты не могут достичь вашего порта UDP, Raknetify переключается на TCP молча, и вы даже не узнаете, что что-то пошло не так. Проверьте свой брандмауэр и правила перенаправления портов. Используйте Проверку статуса сервера Minecraft, чтобы убедиться, что ваш сервер доступен, а затем вручную проверьте связь UDP, если возможно.
- Неравенство версий. Raknetify требует 1.17.1+. Если вы на 1.16, он не будет работать. И клиент, и сервер должны быть на одной и той же или схожей версии Minecraft, или ViaVersion должен обрабатывать перевод.
- Перебор версий прокси. Версия для BungeeCord и Velocity - разные сборки. Скачайте правильную для вашего типа прокси.
- Надежда на уже стабильные соединения. Если ваше соединение уже хорошее (низкий пинг, нет потери пакетов), Raknetify не сделает вещи быстрее. Вы, возможно, даже увидите небольшой накладной расход. Устанавливайте его только если у вас действительно ненадёжные соединения для тестирования.
С точки зрения производительности, накладные расходы минимальны. Вы обмениваетесь на небольшую часть CPU на лучшую приоритизацию пакетов, что почти всегда оправдано.
Аналогичные проекты и альтернативы
Несколько других проектов решают связанные проблемы, хотя ни один не делает ровно то же, что Raknetify:
- Geyser. Объединяет Bedrock и Java Edition. Он также использует RakNet для клиентов Bedrock, но решает другую проблему (кроссплатформенную игру), а не надёжность соединения per se.
- Оптимизации на стороне прокси. Некоторые конфигурации прокси, например, настройки сжатия Velocity, могут помочь, но они не реорганизируют, как пакеты приоритизируются, как это делает Raknetify.
- Специализированное серверное ПО. Некоторые форки Spigot утверждают, что оптимизируют сетевое взаимодействие, но большинство из них не поддерживаются или устарели. Raknetify активно развивается и имеет чистый, модульный подход.
Если вы управляете большим публичным сервером и хотите выжать каждую последнюю долю производительности из ненадёжных соединений, вы можете объединить Raknetify с другими оптимизациями. Но для большинства людей Raknetify alone справляется с работой.
Значит, стоит ли устанавливать его? Если у вас стабильный интернет, вероятно, нет. Если вы застряли с ненадёжным соединением и хотите увидеть, помогает ли это, это займёт пять минут и ничего не стоит. И если вы управляете прокси-сервером, обслуживающим игроков глобально или в зонах с плохой инфраструктурой, это стоит иметь в вашем арсенале. Код чистый, проект активно поддерживается, и сообщество вокруг него, кажется, отзывчиво на проблемы.
Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.
Комментарии
Пока нет комментариев. Станьте первым, кто поделится своим мнением!


