Skip to content

RakNet バックエンドの比較 ​

bedrock-protocol は UDP 低レイヤプロトコル RakNet の実装を差し替え可能にしており、3つのバックエンドから選択できます。デフォルトは raknet-native で、インストールが失敗した場合はフォールバックとして jsp-raknet が自動選択されます(src/rak.js 参照)。

一覧比較 ​

raknet-nativejsp-raknetraknet-node
実装言語C++JavaScript(Node.js)Rust
作者extremeheatJSPrismarine / extremeheatb23r0
npm パッケージ名raknet-nativejsp-raknetraknet-node
最新バージョン1.2.3 (2023)2.2.0 (2022)0.5.0 (2022)
プレビルドあり(64bit Win/Linux/macOS)不要(純 JS)あり
ビルドツール必要?C++ コンパイラ + CMake(プレビルド失敗時)不要Rust コンパイラ(プレビルド失敗時)
パフォーマンス★★★ 最速(ネイティブバイナリ)★ 低速(純 JS)★★ 中速(Rust JNI)
Worker モード—クライアントのみ(useRaknetWorker)—
安定性既定値・汎用非推奨("not stable" — jsp-raknet README)代替案
ウィルス誤検知稀に(ネイティブバイナリのため)なしなし

各バックエンドの詳細 ​

raknet-native(C++ 実装) — 既定値 ​

C++ で書かれた node-raknet-native のビンドリングです。64ビットの Windows / Linux / macOS 用にプレビルドバイナリが配布されており、通常は npm install でそのまま使います。

  • 利点: 最も高速。UDP ソケット操作がネイティブスピードで、接続数が多いサーバーに向く
  • 注意: プレビルドが利用できないプラットフォーム(ARM、32bit 等)では C++ コンパイラ + CMake が必要
  • ウィルス誤検知: Windows Defender がネイティブバイナリを誤検知するケースがある(FAQ参照)
js
// 明示的に指定する場合(既定値なので省略も可)
const client = bedrock.createClient({
  raknetBackend: 'raknet-native', // 既定値
  // ...
})

jsp-raknet(純 JavaScript 実装) — フォールバック ​

JSPrismarine/RakNet による完全な JavaScript 実装です。ネイティブバイナリを一切使わないため、ビルドツール不要で全プラットフォームで動作します。

  • 利点: インストールが最も簡単。ビルドツール不要。サーバー側の Worker モードは未実装だが、クライアント側は useRaknetWorker: true でメインスレッド負荷を軽減可能
  • 注意: README に "This is not stable" と明記されている。ネイティブ実装に比べてパフォーマンスが低く、高負荷環境では問題が出やすい
  • 利用場面: プレビルドが使えない環境、ビルドツールが用意できないコンテナ、簡易的な接続テスト
js
// フォールバック先
const client = bedrock.createClient({
  raknetBackend: 'jsp-raknet',
  useRaknetWorker: true, // クライアント: Worker で RakNet 処理を分離
  // ...
})

自動フォールバック

raknetBackend を指定しない(既定値)場合、raknet-native の読み込みに失敗すると自動的に jsp-raknet にフォールバックし、コンソールにデバッグメッセージが出ます。確実にネイティブを使いたい場合は明示的に指定してください。

raknet-node(Rust 実装) ​

b23r0/rust-raknet の Node.js バインドです。Rust で書き直されたバイナリをネイティブリンクします。

  • 利点: Rust の安全性と性能の中間。C++ コンパイラが不要で Cargo ベース
  • 注意: 2021 年以降の更新が限定的(最新 v0.5.0、2021年10月)。他の2つと同等の互換性テストが不足している可能性がある
  • 利用場面: C++ ビルド環境を避けつつネイティブ性能が必要な場合
js
const client = bedrock.createClient({
  raknetBackend: 'raknet-node',
  // ...
})

選択ガイド ​

状況推奨バックエンド
本番環境・サーバー運用raknet-native
ローカル開発・テストraknet-native(既定値)
ARM / 32bit / ビルドツールなしjsp-raknet
ボット数が少ない(10未満)jsp-raknet でも十分
Rust 環境がある + C++ 不要にしたいraknet-node
Cloud Functions / ブラウザ(将来)jsp-raknet 以外は使えない

パフォーマンスの目安

  • クライアント(ボット): 接続 1 台だけならバックエンドの違いは体感ほぼなし。10 台以上の接続管理になるとネイティブの差が出ます
  • サーバー: 接続数が 10 を超えると raknet-native が安定。20 以上は jsp-raknet では不具合報告のリスクがあります