RakNetty — это чистая и современная реализация (порт) RakNet от Oculus на языке Java.
RakNet — это сетевая библиотека, используемая во многих проектах, включая знаменитые Minecraft: Bedrock Edition и Unity Engine. RakNet использует UDP в качестве сетевого протокола, который по умолчанию не поддерживает соединение, и пакеты не гарантированно достигают пункта назначения, по сравнению с TCP. RakNet реализует ряд алгоритмов, гарантирующих упорядоченную и надежную доставку пакетов. RakNetty портирует протокол и алгоритмы на Java.
RakNetty построен на основе Netty, высокопроизводительной асинхронной управляемой событиями среды. По сравнению с исходной версией C++, использующей блокирующий ввод-вывод, RakNetty имеет преимущества неблокирующего ввода-вывода, позволяющие еще больше улучшить общую производительность, что достигается за счет распределения пакетов, обрабатываемых несколькими потоками. Для сравнения, исходная версия RakNet также обрабатывает пакеты для всех соединений в одном потоке.
В настоящее время RakNetty функционирует и поддерживает большинство функций RakNet, но проверено лишь на элементарной основе. Коды также организованы в структуру, подобную Netty, с преобразованием стиля Java, а не в побайтовую копию исходной версии C++.
< repositories >
< repository >
< id >nukkit-releases</ id >
< url >https://nukkit.org/nexus/repository/maven-releases/</ url >
</ repository >
</ repositories >
< dependency >
< groupId >org.nukkit</ groupId >
< artifactId >raknetty</ artifactId >
< version >1.0</ version >
</ dependency >
См. пример клиента
См. пример сервера
RakNet определяет ряд констант в своем исходном коде, что позволяет разработчикам переопределять их путем переопределения. Minecraft: Bedrock Edition использует другую версию RakNet и меняет некоторые константы. Для общего использования RakNetty поддерживает переопределение констант другим способом, используя преимущества параметров канала Netty.
Вариант | Описание | РакНет по умолчанию | Коренная порода |
---|---|---|---|
RAKNET_GUID | Руководство сервера | Случайный | Случайный |
RAKNET_NUMBER_OF_INTERNAL_IDS | Размер списка адресов в запросе на соединение | 10 | 20 |
RAKNET_PROTOCOL_VERSION | Версия протокола RakNet | 6 | 10 |
RAKNET_MAX_CONNECTIONS | Максимальное количество подключений | Пользовательский | Пользовательский |
RAKNET_MAX_MTU_SIZE | Максимально допустимый размер MTU | 1492 | 1400 |
RAKNET_OFFLINE_RESPONSE | Автономный ответ при пинге | Нить | Сервер МОТД |
Использование:
ServerBootstrap boot ; // your own server bootstrap
boot . option ( RakServerChannelOption . RAKNET_GUID , 123456L )
. option ( RakServerChannelOption . RAKNET_NUMBER_OF_INTERNAL_IDS , 20 )
. option ( RakServerChannelOption . RAKNET_PROTOCOL_VERSION , 10 )
. option ( RakServerChannelOption . RAKNET_MAX_CONNECTIONS , 15 )
. option ( RakServerChannelOption . RAKNET_MAX_MTU_SIZE , 1400 )
. option ( RakServerChannelOption . RAKNET_OFFLINE_RESPONSE , new ExampleBedrockPingResponse ());
Вариант | Описание | РакНет по умолчанию | Коренная порода |
---|---|---|---|
RAKNET_GUID | Руководство сервера | Случайный | Случайный |
RAKNET_NUMBER_OF_INTERNAL_IDS | Размер списка адресов в запросе на соединение | 10 | 20 |
RAKNET_PROTOCOL_VERSION | Версия протокола RakNet | 6 | 10 |
RAKNET_CONNECT_MTU_SIZES | Размеры для пробы, чтобы определить размер MTU | 1492, 1200, 576 | 1492, 1200, 576 |
RAKNET_CONNECT_ATTEMPTS | Попытки, предпринятые до того, как запрос на соединение не удался | 6 | 12 |
RAKNET_CONNECT_INTERVAL | Интервал между каждым запросом соединения | 1000 | 500 |
RAKNET_CONNECT_TIMEOUT | Таймаут запроса на соединение | 0 | 0 |
RAKNET_UNRELIABLE_TIMEOUT | Тайм-аут ненадежных пакетов, которые будут отброшены | 0 | 0 |
RAKNET_TIMEOUT | Таймаут соединения | 10000 | 10000 |
Использование:
Bootstrap boot ; // your own bootstrap
boot . option ( RakChannelOption . RAKNET_GUID , 654321L )
. option ( RakChannelOption . RAKNET_NUMBER_OF_INTERNAL_IDS , 20 )
. option ( RakChannelOption . RAKNET_PROTOCOL_VERSION , 10 )
. option ( RakChannelOption . RAKNET_CONNECT_INTERVAL , 500 )
. option ( RakChannelOption . RAKNET_CONNECT_ATTEMPTS , 12 );