RakNetty es una implementación (puerto) limpia y moderna de RakNet de Oculus en Java.
RakNet es una biblioteca de redes utilizada por muchos proyectos, incluidos los famosos Minecraft: Bedrock Edition y Unity Engine. RakNet utiliza UDP como protocolo de red, que no tiene conexión de forma predeterminada y no se garantiza que los paquetes lleguen al destino, en comparación con TCP. RakNet implementa una serie de algoritmos para garantizar que los paquetes se puedan entregar de forma ordenada y fiable. RakNetty transfiere el protocolo y los algoritmos a Java.
RakNetty está construido sobre la base de Netty, un marco asincrónico impulsado por eventos de alto rendimiento. En comparación con la versión original de C++ que utiliza Blocking IO, RakNetty tiene las ventajas de Non-blocking IO para mejorar aún más el rendimiento general, lo que se logra enviando los paquetes para que sean manejados por múltiples subprocesos. En comparación, la versión original de RakNet también maneja los paquetes para todas las conexiones en un solo hilo.
Actualmente, RakNetty es funcional y admite la mayoría de las funciones de RakNet, pero solo se ha probado de forma trivial. Los códigos también están organizados en una estructura similar a Netty con conversión de estilo Java en lugar de una copia byte a byte de la versión original de 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 >
Ver cliente de ejemplo
Ver servidor de ejemplo
RakNet define una serie de constantes en su código original, lo que permite a los desarrolladores anularlas redefiniéndolas. Minecraft: Bedrock Edition usa una versión diferente de RakNet y cambia algunas constantes. Para fines de uso general, RakNetty admite la anulación de constantes de una manera diferente, aprovechando las opciones de canal de Netty.
Opción | Descripción | RakNet predeterminado | Base |
---|---|---|---|
RAKNET_GUID | guid del servidor | Aleatorio | Aleatorio |
RAKNET_NUMBER_OF_INTERNAL_IDS | Tamaño de la lista de direcciones en la solicitud de conexión | 10 | 20 |
RAKNET_PROTOCOL_VERSION | Versión del protocolo RakNet | 6 | 10 |
RAKNET_MAX_CONNECTIONS | Número de conexiones máximas | Específico del usuario | Específico del usuario |
RAKNET_MAX_MTU_SIZE | Tamaño máximo permitido de MTU | 1492 | 1400 |
RAKNET_OFFLINE_RESPONSE | Respuesta sin conexión al hacer ping | Cadena | Servidor MODT |
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 ());
Opción | Descripción | RakNet predeterminado | Base |
---|---|---|---|
RAKNET_GUID | guia del servidor | Aleatorio | Aleatorio |
RAKNET_NUMBER_OF_INTERNAL_IDS | Tamaño de la lista de direcciones en la solicitud de conexión | 10 | 20 |
RAKNET_PROTOCOL_VERSION | Versión del protocolo RakNet | 6 | 10 |
RAKNET_CONNECT_MTU_SIZES | Tamaños de prueba para detectar el tamaño de MTU | 1492, 1200, 576 | 1492, 1200, 576 |
RAKNET_CONNECT_ATTEMPTS | Intentos que se deben realizar antes de que falle la solicitud de conexión. | 6 | 12 |
RAKNET_CONNECT_INTERVAL | Intervalo entre cada solicitud de conexión | 1000 | 500 |
RAKNET_CONNECT_TIMEOUT | Tiempo de espera de solicitud de conexión | 0 | 0 |
RAKNET_UNRELIABLE_TIMEOUT | Tiempo de espera para descartar paquetes no confiables | 0 | 0 |
RAKNET_TIMEOUT | Tiempo de espera de conexión | 10000 | 10000 |
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 );