REDSTONE ゲームサーバー構成と機能解析 - LostMyCode/redstone-js GitHub Wiki
REDSTONE ONLINE は、複数の専門サーバーが連携して動作する大規模な MMORPG です。以下に、各サーバーの機能と連携について詳細に分析した結果をまとめます。
[!NOTE] このドキュメントは @LostMyCode によって作成されました。
サーバー構成の概要
REDSTONE ゲームサーバーは、以下の主要なサーバーで構成されています。
- RedStone_LoginServer: ログイン認証とアカウント管理を担当。
- RedStone_USER_DBServer: ユーザーアカウント情報に特化したデータベースサーバー。
- RedStone_DBServer: ゲーム内のデータ(キャラクター、アイテム、スキル、ギルドなど)を管理する主要なデータベースサーバー。
- RedStone_GameServer: 実際のゲームプレイ(戦闘、スキル、アイテム使用、クエスト進行など)を処理するコアサーバー。
- RedStone_WorldServer: 複数のゲームサーバー間の連携、ギルド、パーティー、ワールドイベントなど、ワールド全体に関わる情報を管理。
- RedStone_BroadcastServer: ゲーム内の広範囲なメッセージング(全体チャット、システムアナウンスなど)を担当。
- RedStone_LogServer: ゲーム内の様々なログ(操作ログ、エラーログ、経済ログなど)を記録。
各サーバーの詳細な機能分析
1. RedStone_LoginServer
RedStone_LoginServer
は、すべてのゲームクライアントの初期エントリポイントとして機能します。高性能な IOCP モデルに基づいて構築されており、その主な責任は以下の通りです。
- クライアント接続管理: 新しいクライアント接続を受け入れ、そのライフサイクルを管理します。
- ランチャー情報提供: ゲームランチャーにサーバーの状態、パッチ情報、通知を提供します。
- 認証プロキシ: 実際のユーザー認証 (ID/パスワード検証) を
RedStone_USER_DBServer
に委譲します。機密性の高いログインデータを暗号化/復号化します。 - ゲームサーバーリスト提供: クライアントの初期タイプ識別後、利用可能なゲームワールド/サーバーのリストをクライアントに提供します。
- キャラクター管理プロキシ: キャラクターの作成、削除、選択に関して、適切な
RedStone_WorldServer
にこれらの要求を転送するプロキシとして機能します。ログインサーバー自体はキャラクターデータを直接処理しません。 - システム監視: ハードウェア監視とレポート (もし
dUSE_SERVERSTATUS_REPORT
が定義されていれば) のロジックを含み、ロギングシステムに定期的な「ライフサイン」を送信します。
要するに、RedStone_LoginServer
は、クライアントを正しいゲームワールドに誘導し、重い認証とキャラクターデータ管理を専門のバックエンドサーバー (RedStone_USER_DBServer
と RedStone_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_GameServer
や RedStone_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 のサーバーアーキテクチャは、各サーバーが特定の役割に特化し、相互に連携することで大規模なゲーム世界を構築しています。
-
ログインと認証:
- クライアントはまず
RedStone_LoginServer
に接続し、ログイン情報を送信します。 RedStone_LoginServer
は受け取ったログイン情報をRedStone_USER_DBServer
に問い合わせて認証を行います。- 認証が成功すると、
RedStone_LoginServer
はクライアントに利用可能なゲームサーバーのリストを提供し、クライアントは接続するRedStone_GameServer
を選択します。
- クライアントはまず
-
ゲームプレイ:
- クライアントが選択した
RedStone_GameServer
に接続します。 RedStone_GameServer
は、プレイヤーのキャラクターデータやゲーム内の状態をRedStone_DBServer
から読み込みます。- プレイヤーの操作(移動、攻撃、スキル使用など)は
RedStone_GameServer
で処理され、ゲームロジックが実行されます。 - ゲームの状態が変化し、永続化が必要なデータ(アイテムの取得、経験値の獲得など)は
RedStone_DBServer
に書き込まれます。 - 他のプレイヤーとのインタラクション(パーティー、ギルド、ワールドチャットなど)や、異なるゲームサーバー間の連携が必要な場合は、
RedStone_WorldServer
と通信します。 - 広範囲なメッセージ(全体チャット、システムアナウンスなど)は
RedStone_BroadcastServer
を通じて配信されます。
- クライアントが選択した
-
データ永続化とログ記録:
RedStone_DBServer
とRedStone_USER_DBServer
は、それぞれゲームデータとユーザーアカウントデータを永続的に保存します。RedStone_LogServer
は、ゲームプレイ中の様々なイベントやシステム情報を記録し、後で分析できるようにします。
この REDSTONE ゲームサーバーは、役割ごとにサーバーを分割するマイクロサービスアーキテクチャに近い構成を取っています。これにより、各サーバーの負荷分散、スケーラビリティの向上、障害発生時の影響範囲の限定が図られています。
[!NOTE] このドキュメントは @LostMyCode によって作成されました。