RakNetty
1.0.0
RakNetty 是 Oculus RakNet 在 java 中的干净且现代的实现(端口)。
RakNet 是一个被许多项目使用的网络库,包括著名的 Minecraft:基岩版和 Unity Engine。 RakNet 使用 UDP 作为其网络协议,与 TCP 相比,UDP 默认情况下是无连接的,并且不能保证数据包到达目的地。 RakNet 实现了多种算法来确保数据包能够以有序且可靠的方式传递。 RakNetty将协议和算法移植到 java。
RakNetty是基于高性能异步事件驱动框架Netty构建的。与使用Blocking IO的原始C++版本相比, RakNetty具有Non-blocking IO的优点,进一步提高了整体性能,这是通过调度多个线程处理数据包来实现的。相比之下,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:基岩版使用不同版本的 RakNet 并更改了一些常量。出于一般用途的目的,RakNetty 通过利用 Netty 的通道选项,支持以不同的方式覆盖常量。
选项 | 描述 | 默认 RakNet | 基岩 |
---|---|---|---|
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 | ping 时离线响应 | 细绳 | 服务器MOTD |
用法:
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 | 基岩 |
---|---|---|---|
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 );