コンテンツにスキップ

マルチプレイヤーサーバー

En Parlant~ のマルチプレイヤーリレーは、Axum と socketioxide を使用して Rust で書かれた軽量な WebSocket サーバーです。Socket.IO を介したリアルタイムチェス対戦のために2人のプレイヤーを接続し、永続ストレージ不要で最小限のリソースで動作します。

リレーサーバーのソースコードは en-parlant-relay リポジトリにあります。

デフォルトのリレーサーバーはそのまま使えますが、独自に運用する利点があります:

  • プライバシー — すべてのゲームトラフィックが自分のインフラ内に留まります
  • 低レイテンシー — プレイヤーの近くにデプロイすることで、より高速な手の送信が可能です
  • 独立性 — デフォルトリレーの稼働状況や可用性に依存しません

リレーリポジトリには fly.toml 設定ファイルが含まれており、Fly.io が最も簡単なデプロイ方法です。Fly.io の無料枠は個人利用に適しています。

  1. Fly CLI をインストールします:

    Terminal window
    curl -L https://fly.io/install.sh | sh
  2. サインアップまたはログインします:

    Terminal window
    fly auth signup
    # or
    fly auth login
  3. リレーをクローンしてデプロイします:

    Terminal window
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    fly launch
    fly deploy

Fly.io が Rust バイナリをビルドしてデプロイし、your-app-name.fly.dev のようなパブリック URL を提供してくれます。

リレーをソースからビルドし、Rust ツールチェーンがインストールされた任意のマシンで実行します。

  1. クローンしてビルドします:

    Terminal window
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    cargo build --release
  2. サーバーを起動します:

    Terminal window
    ./target/release/en-parlant-relay

    サーバーはデフォルトでポート 3210 でリッスンします。

  3. 本番環境では、TLS 終端を処理するためにリバースプロキシ(nginx、Caddy など)の背後で実行してください。リレー自体はプレーンな WebSocket で通信します。プロキシが wss:// 暗号化レイヤーを追加します。

サーバーは非常に軽量です。ゲームルームをメモリ上に保持し、2人のプレイヤー間で手を転送するだけで、それ以外のことは行いません。小規模な VPS や Raspberry Pi でも快適に処理できます。

リレーが稼働したら、En Parlant~ からそのリレーを指定します:

  1. En Parlant~ で Settings を開きます
  2. マルチプレイヤーリレーサーバー URL の設定を見つけます
  3. サーバーの WebSocket エンドポイントを入力します:
    • Fly.io の場合:wss://your-app-name.fly.dev
    • TLS プロキシ付きセルフホストの場合:wss://relay.yourdomain.com
    • ローカル開発の場合:ws://localhost:3210

以上です。アプリはすべてのマルチプレイヤーゲームであなたのリレーを使用します。

リレーの動作について知っておくべきことをいくつか紹介します:

  • ルームコード — サーバーは、紛らわしくない文字セットを使用して6文字のゲームコードを生成します。見た目が似ている文字は除外されており(0/O なし、1/I/L なし)、コードを口頭で共有する際の混乱を防ぎます。

  • ルームのクリーンアップ — ルームは30分間操作がないと自動的に削除されます。60秒ごとにクリーンアップタスクが実行され、アイドル状態のルームを掃除します。

  • 永続ストレージなし — すべての状態はメモリ上に存在します。サーバーが再起動すると、アクティブなルームは失われます。これは設計上の意図です。リレーはステートレスであり、簡単に置き換え可能です。

  • 最小限のリソース — サーバーの CPU とメモリの使用量はごくわずかです。一方のプレイヤーから Socket.IO イベントを受信し、もう一方のプレイヤーに転送するだけです。ゲームロジック、手の検証、データベースは一切ありません。