RakNetty é uma implementação (porta) limpa e moderna do RakNet da Oculus em java.
RakNet é uma biblioteca de rede usada por muitos projetos, incluindo o renomado Minecraft: Bedrock Edition e Unity Engine. RakNet usa UDP como protocolo de rede, que por padrão não tem conexão e não há garantia de que os pacotes cheguem ao destino, em comparação com o TCP. RakNet implementa vários algoritmos para garantir que os pacotes possam ser entregues de forma ordenada e confiável. RakNetty porta o protocolo e algoritmos para java.
RakNetty é construído com base no Netty, uma estrutura orientada a eventos assíncronos de alto desempenho. Em comparação com a versão original c++ usando Blocking IO, RakNetty tem as vantagens de Non-blocking IO para melhorar ainda mais o desempenho geral, que é alcançado despachando os pacotes para serem manipulados por vários threads. Em comparação, a versão original do RakNet também lida com pacotes para todas as conexões em um único thread.
Atualmente, o RakNetty é funcional e oferece suporte à maioria dos recursos do RakNet, mas apenas testado trivialmente. Os códigos também são organizados em uma estrutura semelhante a Netty com conversão no estilo Java, em vez de uma cópia byte a byte da versão original em 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 >
Veja exemplo de cliente
Veja exemplo de servidor
RakNet define uma série de constantes em seu código original, o que permite aos desenvolvedores substituí-las por meio de redefinição. Minecraft: Bedrock Edition usa uma versão diferente do RakNet e altera algumas constantes. Para fins de uso geral, o RakNetty suporta a substituição de constantes de uma maneira diferente, aproveitando as opções de canal do Netty.
Opção | Descrição | RakNet padrão | Base rochosa |
---|---|---|---|
RAKNET_GUID | Guia do servidor | Aleatório | Aleatório |
RAKNET_NUMBER_OF_INTERNAL_IDS | Tamanho da lista de endereços na solicitação de conexão | 10 | 20 |
RAKNET_PROTOCOL_VERSION | Versão do protocolo RakNet | 6 | 10 |
RAKNET_MAX_CONNECTIONS | Número máximo de conexões | Específico do usuário | Específico do usuário |
RAKNET_MAX_MTU_SIZE | Tamanho máximo permitido de MTU | 1492 | 1400 |
RAKNET_OFFLINE_RESPONSE | Resposta offline ao executar ping | Corda | Servidor MOTD |
Uso:
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 ());
Opção | Descrição | RakNet padrão | Base rochosa |
---|---|---|---|
RAKNET_GUID | Guia do servidor | Aleatório | Aleatório |
RAKNET_NUMBER_OF_INTERNAL_IDS | Tamanho da lista de endereços na solicitação de conexão | 10 | 20 |
RAKNET_PROTOCOL_VERSION | Versão do protocolo RakNet | 6 | 10 |
RAKNET_CONNECT_MTU_SIZES | Tamanhos para teste para detectar o tamanho do MTU | 1492, 1200, 576 | 1492, 1200, 576 |
RAKNET_CONNECT_ATTEMPTS | Tentativas a serem feitas antes da falha da solicitação de conexão | 6 | 12 |
RAKNET_CONNECT_INTERVAL | Intervalo entre cada solicitação de conexão | 1000 | 500 |
RAKNET_CONNECT_TIMEOUT | Tempo limite da solicitação de conexão | 0 | 0 |
RAKNET_UNRELIABLE_TIMEOUT | Tempo limite de pacotes não confiáveis a serem descartados | 0 | 0 |
RAKNET_TIMEOUT | Tempo limite de conexão | 10.000 | 10.000 |
Uso:
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 );