マルチプレイヤー マッチメイキングのリファレンス アーキテクチャ
設計時の考慮事項
マッチメイキングを実装するには、マッチメイキング セッションを探しているプレイヤーのデータを格納するためのデータベースと、サーバーまたは一連のサーバーレス Azure Functions 上で実行される、ロジックを処理するプロセスが必要です。
- プレイヤーをキューに追加する - プレイヤーがマルチプレイヤー セッションの検索の開始を希望すると呼び出されます。
- キューからプレイヤーを削除する - プレイヤーがマルチプレイヤー セッションの検索の停止 (マッチメイキングのキャンセル) を決定すると呼び出されます。
- プレイヤーにマッチを提供する - ポーリング メカニズムによって呼び出され、ゲーム セッション サーバーの接続の詳細またはタイムアウト イベントのいずれかを返します。
- サーバーを追加する - 新しいサーバーが作成されると、データベースに追加する関連する接続情報 (IP:Port) を渡します。
- 高レベル マネージャー - 開始できるゲーム セッションを探し、それぞれに対するサーバーを検索します。
必要に応じて、別のプロセスまたは Azure 関数を使用し、十分な数のサーバーがないことが検出されたらスケールアウトを要求することができます。 別の方法としては、ゲームをホストするオーケストレータにこれを委任します (使用している場合)。
マッチメイキング ロジックを作成するときは、3 つの重要な変数を考慮する必要があります。 3 つのうち少なくとも 2 つが機能すようにします。
- 最善のスキル マッチ - ゲーム セッションに対して検討されるすべてのプレイヤーについて、ゲームに関する専門知識をどれくらい近くするか。
- 最善の待機時間 - 各プレイヤーの待機時間をどれくらい近くするか。
- 最善のキューイング時間 - プレイヤーが参加するゲーム セッションを見つけるのにかかる時間はどれくらいか。
さらに、考慮する必要がある関連概念がいくつかあります。
- ホワイトリスト/ブラックリスト - プレイヤーまたはゲームの作成者は、特定のプレイヤーをブロックしたり、特定のプレイヤーをゲーム セッションに参加させたりすることができるか。
- 途中参加 - プレイヤーは、開始後にゲーム セッションに参加できるか。
- 自動取り消し - 開始できない特定のゲーム セッションを自動的にキャンセルする時間制限を設定するか。
まとめると、ランダムなマッチメイキングの時間を短縮するための適切なアプローチは、ゲームでサポートする各種類に対してキューを用意し、マッチメイクを試みる各プレイヤーを、要求と一致するすべてのキューに入れることです。 その後、キューがいっぱいになったら、その特定のゲーム セッションを開始し、関連するプレイヤーをすべてのキューから削除します。
ヒント
すぐに使えるマッチメイキング ソリューションを探している場合、PlayFab は、マッチメイキングのサポートを備えたクラウド接続ゲームを構築、公開、拡大するための完全なバックエンド プラットフォームです。
参照実装の詳細
次に示すのは、同じユース ケースをさらに簡単に始めるための別の実装です。
- サーバーレス - Azure Functions と Azure Cache for Redis を使用。