RakNetty は、Java での Oculus の RakNet のクリーンで最新の実装 (ポート) です。
RakNet は、有名な Minecraft: Bedrock Edition や Unity Engine など、多くのプロジェクトで使用されているネットワーク ライブラリです。 RakNet は、ネットワーク プロトコルとして UDP を使用します。これは、TCP と比較して、デフォルトではコネクションレスであり、パケットが宛先に到達する保証はありません。 RakNet は、パケットが順序どおりに確実に配信されることを保証するために、多数のアルゴリズムを実装しています。 RakNetty はプロトコルとアルゴリズムを Java に移植します。
RakNettyは、高性能の非同期イベント駆動型フレームワークである Netty に基づいて構築されています。ブロッキング IO を使用するオリジナルの C++ バージョンと比較して、 RakNetty にはノンブロッキング IO の利点があり、複数のスレッドで処理されるパケットをディスパッチすることで全体的なパフォーマンスがさらに向上します。それに比べて、RakNet の元のバージョンでは、すべての接続のパケットも単一のスレッドで処理されます。
現在、RakNetty は機能しており、ほとんどの RakNet 機能をサポートしていますが、簡単なテストが行われただけです。また、コードは、元の C++ バージョンのバイト単位のコピーではなく、Java スタイルに変換された Netty のような構造で編成されています。
< 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: Bedrock Edition は異なるバージョンの RakNet を使用し、いくつかの定数が変更されています。一般的な使用を目的として、RakNetty は Netty のチャネル オプションを利用して、別の方法で定数のオーバーライドをサポートします。
オプション | 説明 | デフォルトのラックネット | 岩盤 |
---|---|---|---|
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_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 );