RakNetty ist eine saubere und moderne Implementierung (Portierung) von Oculus RakNet in Java.
RakNet ist eine Netzwerkbibliothek, die von vielen Projekten verwendet wird, darunter der renommierten Minecraft: Bedrock Edition und der Unity Engine. RakNet verwendet UDP als Netzwerkprotokoll, das standardmäßig verbindungslos ist und im Vergleich zu TCP nicht garantiert wird, dass Pakete das Ziel erreichen. RakNet implementiert eine Reihe von Algorithmen, um sicherzustellen, dass Pakete geordnet und zuverlässig zugestellt werden können. RakNetty portiert das Protokoll und die Algorithmen nach Java.
RakNetty basiert auf Netty, einem leistungsstarken asynchronen ereignisgesteuerten Framework. Im Vergleich zur ursprünglichen C++-Version, die Blocking IO verwendet, verfügt RakNetty über die Vorteile von Non-blocking IO, um die Gesamtleistung weiter zu verbessern, was durch die Weiterleitung der Pakete zur Verarbeitung durch mehrere Threads erreicht wird. Im Vergleich dazu verarbeitet die Originalversion von RakNet auch die Pakete für alle Verbindungen in einem einzigen Thread.
Derzeit ist RakNetty funktionsfähig und unterstützt die meisten RakNet-Funktionen, wurde jedoch nur trivial getestet. Die Codes sind außerdem in einer Netty-ähnlichen Struktur mit Java-Stilkonvertierung organisiert und nicht in einer Byte-zu-Byte-Kopie der ursprünglichen C++-Version.
< 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 >
Siehe Beispielclient
Siehe Beispielserver
RakNet definiert in seinem Originalcode eine Reihe von Konstanten, die es den Entwicklern ermöglicht, diese durch Neudefinition zu überschreiben. Minecraft: Bedrock Edition verwendet eine andere Version von RakNet und ändert einige Konstanten. Für den allgemeinen Gebrauch unterstützt RakNetty das Überschreiben von Konstanten auf andere Weise, indem es die Kanaloptionen von Netty nutzt.
Option | Beschreibung | Standard-RakNet | Grundgestein |
---|---|---|---|
RAKNET_GUID | Guid des Servers | Zufällig | Zufällig |
RAKNET_NUMBER_OF_INTERNAL_IDS | Größe der Adressliste in der Verbindungsanfrage | 10 | 20 |
RAKNET_PROTOCOL_VERSION | Version des RakNet-Protokolls | 6 | 10 |
RAKNET_MAX_CONNECTIONS | Anzahl der maximalen Verbindungen | Benutzerspezifisch | Benutzerspezifisch |
RAKNET_MAX_MTU_SIZE | Maximal zulässige MTU-Größe | 1492 | 1400 |
RAKNET_OFFLINE_RESPONSE | Offline-Antwort beim Ping | Zeichenfolge | Server-MOTD |
Verwendung:
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 ());
Option | Beschreibung | Standard-RakNet | Grundgestein |
---|---|---|---|
RAKNET_GUID | Guid des Servers | Zufällig | Zufällig |
RAKNET_NUMBER_OF_INTERNAL_IDS | Größe der Adressliste in der Verbindungsanfrage | 10 | 20 |
RAKNET_PROTOCOL_VERSION | Version des RakNet-Protokolls | 6 | 10 |
RAKNET_CONNECT_MTU_SIZES | Größen zum Testen, um die MTU-Größe zu ermitteln | 1492, 1200, 576 | 1492, 1200, 576 |
RAKNET_CONNECT_ATTEMPTS | Versuche, die durchgeführt werden mussten, bevor die Verbindungsanforderung fehlschlug | 6 | 12 |
RAKNET_CONNECT_INTERVAL | Intervall zwischen den einzelnen Verbindungsanfragen | 1000 | 500 |
RAKNET_CONNECT_TIMEOUT | Zeitüberschreitung der Verbindungsanfrage | 0 | 0 |
RAKNET_UNRELIABLE_TIMEOUT | Zeitüberschreitung beim Verwerfen unzuverlässiger Pakete | 0 | 0 |
RAKNET_TIMEOUT | Zeitüberschreitung der Verbindung | 10000 | 10000 |
Verwendung:
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 );