RakNetty est une implémentation (port) propre et moderne de RakNet d'Oculus en Java.
RakNet est une bibliothèque réseau utilisée par de nombreux projets, notamment le célèbre Minecraft : Bedrock Edition et Unity Engine. RakNet utilise UDP comme protocole réseau, qui est sans connexion par défaut et il n'est pas garanti que les paquets atteignent la destination, par rapport à TCP. RakNet implémente un certain nombre d'algorithmes pour garantir que les paquets peuvent être livrés de manière ordonnée et fiable. RakNetty porte le protocole et les algorithmes vers Java.
RakNetty est construit sur la base de Netty, un framework événementiel asynchrone hautes performances. Par rapport à la version C++ originale utilisant Blocking IO, RakNetty présente les avantages des IO non bloquantes pour améliorer encore les performances globales, obtenues en répartissant les paquets à gérer par plusieurs threads. En comparaison, la version originale de RakNet gère également les paquets de toutes les connexions dans un seul thread.
Actuellement, RakNetty est fonctionnel et prend en charge la plupart des fonctionnalités de RakNet, mais n'a été testé que de manière triviale. Les codes sont également organisés dans une structure de type Netty avec une conversion de style Java plutôt qu'une copie octet par octet de la version C++ originale.
< 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 >
Voir exemple de client
Voir exemple de serveur
RakNet définit un certain nombre de constantes dans son code d'origine, ce qui permet aux développeurs de les remplacer en les redéfinissant. Minecraft : Bedrock Edition utilise une version différente de RakNet et modifie certaines constantes. À des fins d'utilisation générale, RakNetty prend en charge le remplacement des constantes d'une manière différente, en tirant parti des options de canal de Netty.
Option | Description | RakNet par défaut | Base |
---|---|---|---|
RAKNET_GUID | Guide du serveur | Aléatoire | Aléatoire |
RAKNET_NUMBER_OF_INTERNAL_IDS | Taille de la liste d'adresses dans la demande de connexion | 10 | 20 |
RAKNET_PROTOCOL_VERSION | Version du protocole RakNet | 6 | 10 |
RAKNET_MAX_CONNECTIONS | Nombre de connexions maximum | Spécifique à l'utilisateur | Spécifique à l'utilisateur |
RAKNET_MAX_MTU_SIZE | Taille MTU maximale autorisée | 1492 | 1400 |
RAKNET_OFFLINE_RESPONSE | Réponse hors ligne lors d'un ping | Chaîne | MOTD du serveur |
Usage:
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 | Description | RakNet par défaut | Base |
---|---|---|---|
RAKNET_GUID | Guide du serveur | Aléatoire | Aléatoire |
RAKNET_NUMBER_OF_INTERNAL_IDS | Taille de la liste d'adresses dans la demande de connexion | 10 | 20 |
RAKNET_PROTOCOL_VERSION | Version du protocole RakNet | 6 | 10 |
RAKNET_CONNECT_MTU_SIZES | Tailles à tester pour détecter la taille MTU | 1492, 1200, 576 | 1492, 1200, 576 |
RAKNET_CONNECT_ATTEMPTS | Tentatives à effectuer avant l'échec de la demande de connexion | 6 | 12 |
RAKNET_CONNECT_INTERVAL | Intervalle entre chaque demande de connexion | 1000 | 500 |
RAKNET_CONNECT_TIMEOUT | Timeout de la demande de connexion | 0 | 0 |
RAKNET_UNRELIABLE_TIMEOUT | Délai d'expiration des paquets peu fiables à éliminer | 0 | 0 |
RAKNET_TIMEOUT | Délai de connexion | 10000 | 10000 |
Usage:
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 );