REDSTONE ゲームサーバー構成と機能解析 - LostMyCode/redstone-js GitHub Wiki

REDSTONE ONLINE は、複数の専門サーバーが連携して動作する大規模な MMORPG です。以下に、各サーバーの機能と連携について詳細に分析した結果をまとめます。

[!NOTE] このドキュメントは @LostMyCode によって作成されました。

サーバー構成の概要

REDSTONE ゲームサーバーは、以下の主要なサーバーで構成されています。

  1. RedStone_LoginServer: ログイン認証とアカウント管理を担当。
  2. RedStone_USER_DBServer: ユーザーアカウント情報に特化したデータベースサーバー。
  3. RedStone_DBServer: ゲーム内のデータ(キャラクター、アイテム、スキル、ギルドなど)を管理する主要なデータベースサーバー。
  4. RedStone_GameServer: 実際のゲームプレイ(戦闘、スキル、アイテム使用、クエスト進行など)を処理するコアサーバー。
  5. RedStone_WorldServer: 複数のゲームサーバー間の連携、ギルド、パーティー、ワールドイベントなど、ワールド全体に関わる情報を管理。
  6. RedStone_BroadcastServer: ゲーム内の広範囲なメッセージング(全体チャット、システムアナウンスなど)を担当。
  7. RedStone_LogServer: ゲーム内の様々なログ(操作ログ、エラーログ、経済ログなど)を記録。

各サーバーの詳細な機能分析

1. RedStone_LoginServer

RedStone_LoginServer は、すべてのゲームクライアントの初期エントリポイントとして機能します。高性能な IOCP モデルに基づいて構築されており、その主な責任は以下の通りです。

  • クライアント接続管理: 新しいクライアント接続を受け入れ、そのライフサイクルを管理します。
  • ランチャー情報提供: ゲームランチャーにサーバーの状態、パッチ情報、通知を提供します。
  • 認証プロキシ: 実際のユーザー認証 (ID/パスワード検証) を RedStone_USER_DBServer に委譲します。機密性の高いログインデータを暗号化/復号化します。
  • ゲームサーバーリスト提供: クライアントの初期タイプ識別後、利用可能なゲームワールド/サーバーのリストをクライアントに提供します。
  • キャラクター管理プロキシ: キャラクターの作成、削除、選択に関して、適切な RedStone_WorldServer にこれらの要求を転送するプロキシとして機能します。ログインサーバー自体はキャラクターデータを直接処理しません。
  • システム監視: ハードウェア監視とレポート (もし dUSE_SERVERSTATUS_REPORT が定義されていれば) のロジックを含み、ロギングシステムに定期的な「ライフサイン」を送信します。

要するに、RedStone_LoginServer は、クライアントを正しいゲームワールドに誘導し、重い認証とキャラクターデータ管理を専門のバックエンドサーバー (RedStone_USER_DBServerRedStone_WorldServer) にオフロードする、軽量で高スループットなゲートウェイです。

2. RedStone_USER_DBServer

RedStone_USER_DBServer は、ユーザーアカウント情報と一部のゲーム関連データを管理する、ゲームサーバー群の中核となるデータベースキャッシュサーバーです。主に RedStone_LoginServer からの認証要求や、他のサーバーからのユーザーデータ参照・更新要求に応答します。

  • ユーザー認証: RedStone_LoginServer からのログイン要求を受け取り、ユーザーID、パスワード、MACアドレス、クライアント情報などに基づいて SQL Server データベースで認証を行います。OTP 認証もサポートします。
  • アカウント管理: ユーザーのログイン状態の更新(ログイン/ログアウト)、および(コード上は存在するが現在使用されていない可能性のある)アカウント作成・削除の機能を提供します。
  • サーバー情報管理: 接続しているログインサーバーやワールドサーバーの稼働状況(ユーザー数など)をデータベースに記録し、他のサーバーに提供します。
  • ゲーム内イベント管理: ゲーム内イベントの進行状況や参加者情報をデータベースで管理し、他のサーバーからの問い合わせに応答します。
  • PvP 戦績・ランキング管理: プレイヤーおよびチームの PvP 戦績(勝敗、ポイントなど)をデータベースに保存し、日次・週次ランキングの計算と提供を行います。
  • ゲーム内ストア(キャロットショップ)情報提供: キャロットショップのアイテム情報をデータベースから取得し、他のサーバーに提供します。
  • 管理コマンド処理: データベースに登録された管理コマンド(サーバーの ON/OFF、バージョン変更、お知らせなど)を定期的にチェックし、関連するサーバーに適用します。
  • ログ記録: ログイン/ログアウト、クエスト進行などの重要なゲーム内イベントをデータベースに記録します。

このサーバーは、IOCP とマルチスレッドを活用して高いスループットと応答性を実現しており、ADO を通じて SQL Server データベースと密接に連携しています。ユーザーアカウントの認証と、ゲームの永続的なデータの一部(特に PvP やイベント関連)を集中管理する役割を担っています。

3. RedStone_DBServer

RedStone_DBServer は、ゲーム内の永続的なデータ(キャラクター、アイテム、ギルド、銀行、イベントなど)を管理する中心的なサーバーです。主に RedStone_GameServerRedStone_WorldServer からのデータ読み書き要求に応答します。

  • キャラクターデータ管理: キャラクターの作成、削除、ロード、保存を処理します。キャラクターの全データ(ステータス、インベントリ、スキルなど)は圧縮されてデータベースに保存されます。
  • ギルドデータ管理: ギルドの作成、削除、メンバー管理、ギルドホール、ギルドバトル、ギルドペット/ガーディアンなど、ギルドに関するあらゆる情報をデータベースに保存・取得します。
  • 銀行システム: プレイヤーの銀行データをロード・保存し、データベースとローカルファイルの両方で管理します。
  • イベント管理: ゲーム内イベント(ゴールドラッシュ、アイテムパックなど)の設定情報をデータベースから取得し、ゲームサーバーに提供します。
  • PvP 戦績管理: プレイヤーおよびチームの PvP 戦績やランキング情報をデータベースに保存・取得します。
  • 共有メモリ連携: CClientDataManager を介して共有メモリを使用し、ゲームサーバーと効率的にキャラクターデータをやり取りします。これにより、頻繁な DB アクセスを減らし、パフォーマンスを向上させています。
  • ログ記録: キャラクターの作成、削除、ログイン、ログアウトなどの重要なイベントをログサーバーに送信します。
  • 管理コマンド処理: データベースから管理コマンドを取得し、ゲームサーバーに適用します。

このサーバーは、IOCP とマルチスレッドを活用して高いスループットと応答性を実現しており、ADO を通じて SQL Server データベースと密接に連携しています。ゲームの複雑なデータ構造を効率的に管理し、ゲームプレイの永続性を保証する役割を担っています。

4. RedStone_GameServer

RedStone_GameServer は、ゲームプレイの大部分を処理するコアサーバーです。プレイヤーの行動、モンスターの AI、スキルの計算、アイテムの管理、クエストの進行など、ゲーム内の動的な要素をリアルタイムで処理します。

  • リアルタイムゲームロジック: プレイヤーの移動、戦闘、スキル使用、アイテム使用、NPC/モンスターの AI など、ゲーム内の動的な要素を毎フレーム更新します。
  • フィールド管理: 各マップ(フィールド)のロード、エンティティの配置、衝突判定、エリア管理、ショップ、ポータル、カルマシステムなどを処理します。
  • キャラクター管理: プレイヤーキャラクターのステータス、インベントリ、装備、スキル、クエスト進行状況などを管理し、クライアントと同期します。
  • アイテムシステム: アイテムの生成、属性付与(接頭辞、ユニークなど)、耐久度、スタック、売買、特殊効果(カービング、無限弾薬など)を詳細に管理します。
  • スキルシステム: スキルの定義、アクティブスキルの管理、クールタイム、効果範囲、ターゲット判定などを処理します。
  • クエストシステム: クエストの定義、プレイヤーのクエスト進行状況の管理、クエストアイテムの処理、クエスト条件の判定などを行います。
  • サーバー間連携:
    • RedStone_WorldServer と連携し、プレイヤーのログイン/ログアウト、フィールド移動、キャラクターデータ要求などを処理します。
    • RedStone_DBServer と連携し、キャラクターデータのロード/保存、銀行データ、ギルドデータ、イベント情報などをやり取りします。
    • RedStone_LogServer にゲーム内の重要なイベント(ログイン、ログアウト、アイテム取得など)をログとして送信します。
    • RedStone_BroadcastServer にプレイヤーのブロードキャスト情報(チャットなど)を登録します。
  • アンチチートシステム: X-Trap などの外部アンチチートソリューションと連携し、不正行為を検出します。
  • 共有メモリの活用: RedStone_DBServer と共有メモリを介してキャラクターデータをやり取りすることで、DB アクセス負荷を軽減し、パフォーマンスを向上させています。

このサーバーは、ゲームの複雑なルールとインタラクションをリアルタイムで処理し、プレイヤーに没入感のあるゲーム体験を提供する役割を担っています。

5. RedStone_WorldServer

RedStone_WorldServer は、複数のゲームサーバー、ログインサーバー、DBサーバー間の連携を調整し、ギルド、パーティー、ワールドイベントなど、ゲームワールド全体に影響する情報を管理します。

  • サーバー間連携の調整: ログインサーバー、ゲームサーバー、DBサーバー、USER_DBサーバー、ブロードキャストサーバー間の通信を仲介し、データの整合性を保ちます。
  • ユーザーセッション管理: ログインしているユーザーの情報を管理し、どのゲームサーバーに接続しているかを追跡します。
  • ギルドシステム: ギルドの作成、管理、ギルドホール、ギルドバトル、ギルドペット/ガーディアンなど、ギルドに関するあらゆる情報を集中管理します。
  • パーティーシステム: パーティーの作成、メンバー管理、フィールド移動時の同期など、パーティーに関する情報を集中管理します。
  • ユニオンパーティーシステム: 複数のパーティーをまとめるユニオンパーティーの作成と管理を行います。
  • ワールドイベント管理: 攻城戦、デュエルマッチ、キャロットショップイベントなど、ワールド全体に影響するイベントのスケジュールと進行を管理し、関連する情報をゲームサーバーに通知します。
  • データ転送プロキシ: ログインサーバーからのキャラクター作成/削除/ロード要求や、GvG サーバーへのアバター/ギルド転送要求を RedStone_DBServer に転送します。
  • 統計情報収集: ユーザー数や接続状況などの統計情報を収集し、ログとして記録します。

このサーバーは、ゲームのバックエンドシステムにおいて、異なる専門サーバー間の橋渡し役となり、大規模なマルチプレイヤーゲーム体験を円滑に提供するために不可欠な役割を担っています。

6. RedStone_BroadcastServer

RedStone_BroadcastServer は、ゲーム内の広範囲なメッセージング(チャット、システムアナウンス、フレンドリストのオンライン状態更新など)を処理するサーバーです。

  • リアルタイムチャット: 全体チャット、ギルドチャット、パーティーチャットなど、様々なチャットメッセージを処理し、関連するプレイヤーにリアルタイムで配信します。
  • フレンドシステム: フレンドリストの管理、フレンドのオンライン状態の更新と通知を行います。
  • パーティー募集: オープンパーティーリストの提供や、パーティー募集要項の管理を行います。
  • ユーザー個人データ管理: ユーザーのスキル設定、フレンドグループ、その他の個人データを管理し、RedStone_DBServer と連携して永続化します。
  • サーバー間連携:
    • RedStone_GameServer からクライアントのログイン/ログアウト、情報更新、チャットメッセージなどを受信します。
    • RedStone_WorldServer からパーティーリストやパーティー情報更新を受信します。
    • RedStone_DBServer と連携してユーザー個人データを保存します。
  • 情報配信: システムメッセージ、イベント通知、ギルド関連の更新など、広範囲な情報をプレイヤーにブロードキャストします。

このサーバーは、プレイヤー間のコミュニケーションを円滑にし、ゲーム内のソーシャルインタラクションをサポートするために不可欠な役割を担っています。

7. RedStone_LogServer

RedStone_LogServer は、ゲーム内の様々なイベントや操作に関するログデータを収集し、ファイルに書き込む役割を担っています。これにより、ゲームの運用状況の監視、問題のデバッグ、不正行為の分析、ユーザー行動の傾向分析などが可能になります。

  • ログデータの収集: ゲームサーバー、ワールドサーバー、ログインサーバーなど、様々なソースからログデータを受信します。
  • ログファイルの管理: 日付ごとに新しいログファイルを自動的に作成し、ログデータを整理して保存します。
  • ログの永続化: 受信したログデータをファイルに書き込み、必要に応じて圧縮します。
  • ログの分類: 接続元サーバーの IP アドレスに基づいてログを分類し、対応するログファイルに書き込みます。
  • ログツール連携: ログツールからの直接的なログデータ受信もサポートします。
  • サーバー監視: 自身の稼働状況を定期的にレジストリに書き込み、他の監視システムがログサーバーの状態を把握できるようにします。

このサーバーは、ゲーム内で発生するあらゆる重要なイベントを記録し、後で分析できるようにすることで、ゲームの品質向上と問題解決に貢献します。

サーバー間の連携と動作フロー

この MMORPG のサーバーアーキテクチャは、各サーバーが特定の役割に特化し、相互に連携することで大規模なゲーム世界を構築しています。

  1. ログインと認証:

    • クライアントはまず RedStone_LoginServer に接続し、ログイン情報を送信します。
    • RedStone_LoginServer は受け取ったログイン情報を RedStone_USER_DBServer に問い合わせて認証を行います。
    • 認証が成功すると、RedStone_LoginServer はクライアントに利用可能なゲームサーバーのリストを提供し、クライアントは接続する RedStone_GameServer を選択します。
  2. ゲームプレイ:

    • クライアントが選択した RedStone_GameServer に接続します。
    • RedStone_GameServer は、プレイヤーのキャラクターデータやゲーム内の状態を RedStone_DBServer から読み込みます。
    • プレイヤーの操作(移動、攻撃、スキル使用など)は RedStone_GameServer で処理され、ゲームロジックが実行されます。
    • ゲームの状態が変化し、永続化が必要なデータ(アイテムの取得、経験値の獲得など)は RedStone_DBServer に書き込まれます。
    • 他のプレイヤーとのインタラクション(パーティー、ギルド、ワールドチャットなど)や、異なるゲームサーバー間の連携が必要な場合は、RedStone_WorldServer と通信します。
    • 広範囲なメッセージ(全体チャット、システムアナウンスなど)は RedStone_BroadcastServer を通じて配信されます。
  3. データ永続化とログ記録:

    • RedStone_DBServerRedStone_USER_DBServer は、それぞれゲームデータとユーザーアカウントデータを永続的に保存します。
    • RedStone_LogServer は、ゲームプレイ中の様々なイベントやシステム情報を記録し、後で分析できるようにします。

この REDSTONE ゲームサーバーは、役割ごとにサーバーを分割するマイクロサービスアーキテクチャに近い構成を取っています。これにより、各サーバーの負荷分散、スケーラビリティの向上、障害発生時の影響範囲の限定が図られています。

[!NOTE] このドキュメントは @LostMyCode によって作成されました。