マルチプレイヤーサーバー
En Parlant~ のマルチプレイヤーリレーは、Axum と socketioxide を使用して Rust で書かれた軽量な WebSocket サーバーです。Socket.IO を介したリアルタイムチェス対戦のために2人のプレイヤーを接続し、永続ストレージ不要で最小限のリソースで動作します。
リレーサーバーのソースコードは en-parlant-relay リポジトリにあります。
セルフホストする理由
Section titled “セルフホストする理由”デフォルトのリレーサーバーはそのまま使えますが、独自に運用する利点があります:
- プライバシー — すべてのゲームトラフィックが自分のインフラ内に留まります
- 低レイテンシー — プレイヤーの近くにデプロイすることで、より高速な手の送信が可能です
- 独立性 — デフォルトリレーの稼働状況や可用性に依存しません
デプロイオプション
Section titled “デプロイオプション”Fly.io(推奨)
Section titled “Fly.io(推奨)”リレーリポジトリには fly.toml 設定ファイルが含まれており、Fly.io が最も簡単なデプロイ方法です。Fly.io の無料枠は個人利用に適しています。
-
Fly CLI をインストールします:
Terminal window curl -L https://fly.io/install.sh | sh -
サインアップまたはログインします:
Terminal window fly auth signup# orfly auth login -
リレーをクローンしてデプロイします:
Terminal window git clone https://github.com/DarrellThomas/en-parlant-relay.gitcd en-parlant-relayfly launchfly deploy
Fly.io が Rust バイナリをビルドしてデプロイし、your-app-name.fly.dev のようなパブリック URL を提供してくれます。
セルフホスト
Section titled “セルフホスト”リレーをソースからビルドし、Rust ツールチェーンがインストールされた任意のマシンで実行します。
-
クローンしてビルドします:
Terminal window git clone https://github.com/DarrellThomas/en-parlant-relay.gitcd en-parlant-relaycargo build --release -
サーバーを起動します:
Terminal window ./target/release/en-parlant-relayサーバーはデフォルトでポート 3210 でリッスンします。
-
本番環境では、TLS 終端を処理するためにリバースプロキシ(nginx、Caddy など)の背後で実行してください。リレー自体はプレーンな WebSocket で通信します。プロキシが
wss://暗号化レイヤーを追加します。
サーバーは非常に軽量です。ゲームルームをメモリ上に保持し、2人のプレイヤー間で手を転送するだけで、それ以外のことは行いません。小規模な VPS や Raspberry Pi でも快適に処理できます。
En Parlant~ の設定
Section titled “En Parlant~ の設定”リレーが稼働したら、En Parlant~ からそのリレーを指定します:
- En Parlant~ で Settings を開きます
- マルチプレイヤーリレーサーバー URL の設定を見つけます
- サーバーの WebSocket エンドポイントを入力します:
- Fly.io の場合:
wss://your-app-name.fly.dev - TLS プロキシ付きセルフホストの場合:
wss://relay.yourdomain.com - ローカル開発の場合:
ws://localhost:3210
- Fly.io の場合:
以上です。アプリはすべてのマルチプレイヤーゲームであなたのリレーを使用します。
サーバーの詳細
Section titled “サーバーの詳細”リレーの動作について知っておくべきことをいくつか紹介します:
-
ルームコード — サーバーは、紛らわしくない文字セットを使用して6文字のゲームコードを生成します。見た目が似ている文字は除外されており(
0/Oなし、1/I/Lなし)、コードを口頭で共有する際の混乱を防ぎます。 -
ルームのクリーンアップ — ルームは30分間操作がないと自動的に削除されます。60秒ごとにクリーンアップタスクが実行され、アイドル状態のルームを掃除します。
-
永続ストレージなし — すべての状態はメモリ上に存在します。サーバーが再起動すると、アクティブなルームは失われます。これは設計上の意図です。リレーはステートレスであり、簡単に置き換え可能です。
-
最小限のリソース — サーバーの CPU とメモリの使用量はごくわずかです。一方のプレイヤーから Socket.IO イベントを受信し、もう一方のプレイヤーに転送するだけです。ゲームロジック、手の検証、データベースは一切ありません。