メインコンテンツへスキップ
この記事では、XBOX 360 以降のプラットフォームで XBOX services の Multiplayer Session Directory (MPSD) サービスを使用したマルチプレイヤー セッションの作成の概要について説明します。 この記事は、主にセッション テンプレートを Partner Center に直接提出する XBOX タイトル開発者を対象としています。 この記事では、マルチプレイヤー セッションの MPSD の構成、使用方法、およびトラブルシューティングについて説明します。 目次:

改訂の概要

現在のクライアント サイドの XBOX Services API (XSAPI) ライブラリは、MPSD サービスとの通信に契約バージョン 104 を使用しています。 このバージョンのドキュメントは、セッション テンプレート スキーマを、MPSD サービスがサポートする最新の契約バージョンである契約バージョン 107 に更新します。 バージョン 104 と 107 の間の変更点は、以下の 契約スキーマの更新 セクションでまとめられています。 契約バージョン 104 用に書かれたテンプレートは、107 として再公開する場合に更新が必要な点に注意してください。 ただし、サービスは下位互換性があるため、現在のライブラリを引き続き使用できます。将来のリリースで更新される予定です。 このドキュメントの前回の改訂では、サーバー セッションに関する情報を更新し、XSAPI と RESTful サービス呼び出しに関する新しいセクションを追加しました。 さらに、Query for Session State Information セクションの表が更新され、Quality of Service (QoS) Templates セクションも改訂されました。

はじめに

マルチプレイヤー セッションは、Multiplayer Session Directory (MPSD) のクラウドに存在する安全なドキュメントであり、このドキュメントはゲームをプレイしている人々のグループを表します。 具体的には、マルチプレイヤー セッションには次の特性があります。
  • 各セッションには一意の URI があります。
  • セッション ドキュメントには、現在のメンバー、ゲーム設定、ブートストラップ データ、およびゲーム サーバー情報が含まれています。
  • タイトルは独自のセッションを作成および管理します。
  • セッションはメンバー間の接続性を可能にします。
Multiplayer Session Directory (MPSD) は、すべてのクライアント間でゲーム セッションのメタデータを集中管理します。 MPSD は、クライアント間のセキュアなデバイス関連付けを設定するのに役立つ、セッションに関する基本情報を提供します。 MPSD はまた、より特定的なゲーム データの受け渡しを開始する前に、クライアントがゲームに接続するための基本的な初回ブート メタデータも提供します。 XBOX One 以降のアプリケーションのプロセス ライフタイム管理 (PLM) およびタスク切り替えの性質により、MPSD は、アクティブなゲーム セッションの一部として識別されるピアおよびサーバーに接続するために必要な正しい情報をクライアントが持っていることを保証し、シェルおよびコンソール オペレーティング システムと連携してゲーム セッションのプレイヤー ライフタイムを予約、アクティブ化、および管理します。

このドキュメントで使用される用語

Multiplayer Session Directory

MPSD は、オンライン プレイヤー間でセッション情報を調整するのに役立ち、タイトルを支援します。 マルチプレイヤー プレイのさまざまなタスクを達成するために、異なる種類のセッションを作成できます。 次の表は、XBOX 360 でそのようなタスクがどのように行われていたか、および XBOX One 以降 (PC を含む) でどのように達成されるかの違いを示しています。

セッション パターン

  • ゲーム セッション
    • プレイヤーの XUID、セキュア デバイス アドレス データ、およびプロパティ状態を持つセッション。これは実際のゲームプレイ セッションと考えられます。
    • ピアツーピア、ピアツーホスト、ピアツーサーバー、またはハイブリッドにすることができます。
  • マッチ チケット セッション
    • 一緒にプレイする他のプレイヤーを見つけるためにマッチメイキングに提出されるセッション。ゲームがさらにプレイヤーを探している場合は、ゲーム セッションもチケット セッションとして機能できることに注意してください。
  • サーバー セッション
    • XBOX Compute 処理を通じて作成および使用されるゲーム セッション。
図 1 は MPSD セッションの使用法を示しており、青いボックスは MPSD セッションを表し、赤いボックスはそれらを使用するサービスを表します。 図 1. MPSD セッションの使用: (図はありません)

MPSD セッション

セッションは、関連するエンティティの 2 つのリストを保持します:
  1. セッションに参加した、または招待されたメンバー (ユーザー)。
  2. セッションに参加したサーバー (クラウド サーバーまたは専用サーバー)。
各エンティティには次のものがあります。
  1. 作成時に設定された定数値。
  2. 変更可能なプロパティ。
  3. 読み取り専用のメタデータ。

XSAPI と RESTful サービス呼び出し

XBOX services の Sessions および Matchmaking サービスとインターフェースする方法は 2 つあります。
  • 標準の HTTPs 呼び出し
  • XSAPI ラッパー

RESTful サービスへの標準 HTTPS 呼び出しを使用する

XBOX One 以降で、XBOX services の Sessions および Matchmaking サービスとインターフェースする最初の方法は、RESTful XBOX services URI への標準 HTTPS 呼び出しを使用することです。 これにより、タイトルはサーバーおよびゲームの構成に応じてこれらのサービスを呼び出しインターフェースする柔軟性が得られます。 これらの URI のリストについては、XBOX services RESTful リファレンス を参照してください。

RESTful サービス用の XSAPI ラッパーを使用する

Sessions および Matchmaking サービスとインターフェースする 2 つ目の方法は、RESTful サービス URI のラッパーとして動作する XSAPI を使用することです。 これにより、各呼び出しに対して HTTPS トラフィックを処理することなく、コードで API を使用するより伝統的なアプローチが可能になります。 XSAPI の詳細については、xbox-live-api GitHub ページ を参照してください。 そのリファレンス ドキュメントには次のものが含まれています。
  • JSON Parsing API Reference - JSON パースの API のリファレンス資料。
  • Windows.Web Namespace - Windows.Web 名前空間のメンバー。
  • XBOX Compute SDK Reference - XBOX Compute 用のゲーム サーバー インスタンスを作成するための API。

MPSD セッションとテンプレート

MPSD セッションは、Partner Center を通じて取り込まれたテンプレートを使用して作成されます。 テンプレートは、作成されるセッションのフレームワークを定義する JSON ドキュメントです。 テンプレートは、新しいセッションのための定数を提供します。 以下は、テンプレート構成の例からの抜粋です。
マッチ チケット セッションは、memberInitialization オブジェクトに QoS タイムアウト値が設定されたゲーム セッション テンプレートと一緒に使用する必要があります。 図 2. サンプル ホッパー: ホッパー編集ダイアログ ボックス 以下のコード抜粋は、ピアツーピア ゲーム セッション テンプレート (タイトル管理の QoS) の例です。
これは、ピアツーサーバー セッションおよび RAW テンプレートの例です。
次のコードは、Smart Match に使用されるマッチ チケット セッション テンプレートの例を示しています。

SCID に対して構成されているテンプレートを確認する

セッション テンプレート

SCID 内に存在するセッション テンプレートのリスト、および特定のセッション テンプレートの詳細は、MPSD から取得できます。

セッション状態情報をクエリする

セッションはサービス構成およびセッション テンプレート レベルでクエリできます:
デフォルトでは、これは最大 100 の非プライベート セッションを返します。 以下のクエリ文字列パラメーターを使用して、クエリを変更できます。 結果はセッション参照の JSON 配列です。 一部のセッション データはインラインで含まれます。 注意 すべてのクエリには、keyword フィルタ、XUID フィルタ、またはその両方を含める必要があります。 private (プライベート セッションを返す) または reservations (ユーザーが参加していないセッションを返す) のいずれかを true に設定するには、呼び出し元がセッションへのサーバー レベルのアクセス権を持っているか、呼び出し元の XUID クレームが URI 内の XUID フィルタと一致する必要があります。 そうでない場合、403 Forbidden が返されます (そのようなセッションが実際に存在するかどうかにかかわらず)。 以下のコード抜粋は、クエリ応答の例を示しています。

セッション テンプレートの属性

契約スキーマの更新

このドキュメントの冒頭で述べたように、最新のセッション テンプレート契約バージョンは 107 で、以前のバージョンである 104 からスキーマにいくつかの変更が導入されています。 契約バージョン 104 用に書かれたテンプレートは、107 として再公開する場合に更新が必要です。 以下は変更点のまとめです。
  • /constants/system/managedInitialization は /constants/system/memberInitialization に名称変更されます。
    • autoEvaluate フィールドは externalEvaluation に名称変更され、極性が変わります (ただし、false はデフォルトのままです)。
    • membersNeededToStart のデフォルト値が 2 から 1 に変更されます。
    • joinTimeout のデフォルト値が 5 秒から 10 秒に変更されます。
    • measurementTimeout のデフォルトが 5 秒から 30 秒に変更されます。
  • /constants/system/timeouts は削除され、タイムアウトは名前が変更され、/constants/system 配下に再配置されます。
    • reserved タイムアウトは reservedRemovalTimeout になります。
    • inactive タイムアウトは inactiveRemovalTimeout になり、新しいデフォルトは 2 時間ではなく 0 です。
    • ready タイムアウトは readyRemovalTimeout になります。
    • sessionEmpty タイムアウトは sessionEmptyTimeout になります。
  • /constants/system/capabilities/gameplay は、直近プレイヤーおよび評判レポートを有効にするために、実際のゲームプレイを表すセッション (マッチやロビー セッションなどのヘルパー セッションとは対照的に) では true として指定する必要があります。

System オブジェクト

セッション ドキュメント内の各 system オブジェクトには、MPSD によって強制および解釈される固定スキーマがあります。 PUT リクエストの本文内では、system オブジェクトはカスタム オブジェクトと同じように検証およびマージされます。 ただし、カスタム オブジェクトとは異なり、マージ後に system オブジェクトはこれらのスキーマに基づいてさらに検証および処理されます。 /constants/system
/properties/system

タイムアウト

セッションは、タイマーおよびその他の外部イベントによって変更される可能性があります。 MPSD の Timeouts オブジェクトは、セッション ライフタイムおよびメンバーを管理するための基本的なメカニズムを提供します。 セッションの nextTimer フィールドは、次のタイマーの時刻を示します。 クライアントはこの情報を使用して、次のポーリングに適した間隔を選択できます。 この値は Expires HTTP ヘッダーでも返されます。 タイムアウトはミリ秒で指定されます。 0 が許可され、タイムアウトが即時であることを意味します。 指定されたタイムアウトが指定されていない場合は、無限と見なされます。 タイムアウトにはデフォルトがあるため、セッション テンプレートは無限タイムアウトを明示的に “null” として指定する必要があります。

SessionEmptyTimeout

/constants/system/sessionEmptyTimeout の値は、セッションが空になってから削除されるまでのミリ秒数を構成します。 デフォルトは 0 で、セッションはすぐに削除されます。 値が指定されていない場合、空のセッションは無期限に存続します。

メンバー タイムアウト

/constants/system 内の他の 3 つのタイムアウトは、メンバーが特定の状態にとどまれる時間を制御します。
  • reservedRemovalTimeout
    • タイムアウトが経過すると予約は削除されます。デフォルトは 30 秒です。
  • inactiveRemovalTimeout
    • 非アクティブ メンバーは、デフォルトで 2 時間後にセッションから削除されます。
  • readyRemovalTimeout
    • “ready” 状態のメンバーは、デフォルトで 3 分後に非アクティブ状態に戻ります。

セッション ドキュメントにおけるメンバー初期化

メンバー初期化

memberInitialization オブジェクトは、セッション作成後および/または新しいメンバーがセッションに参加する際の初期化ステージを制御します。 タイムアウトと初期化ステージは、任意のメトリックが設定されている場合の QoS 測定を含め、セッションによって自動的に追跡されます。 これらのタイムアウトは、initializationEpisode プロパティが設定されているメンバーに対して、セッションの reservation および ready タイムアウトをオーバーライドします。 例:
図 3. メンバー初期化フロー: メンバー初期化フローチャート メンバー初期化の 3 つの各ステージはタイムアウトすることができます。
  1. joiningTimeout
    • ユーザーがセッションに参加するための時間 (ミリ秒単位)。参加できなかったメンバーの予約は削除されます。
  2. measuringTimeout
    • メンバーが測定値をアップロードする時間。測定値のアップロードに失敗したメンバーは、failureReason が “timeout” とマークされます。
  3. evaluationTimeout
    • メンバーが評価判定を行い、アップロードするための時間。判定が受信されなかった場合は失敗としてカウントされます。
externalEvaluation
  • MPSD は、セッション テンプレートで提供される要件に基づいて自動 QoS 評価を実行できます。externalEvaluation が false に設定されている場合、評価が実行されます。evaluationTimeout が設定されている場合、externalEvaluation は true である必要があります。ピアツーピアまたはピアツーホストの要件が 2 つある場合でも、セッションが自動的に初期化を完了できるように externalEvaluation を false に設定する必要があります。
membersNeededToStart
  • これは、自動評価が成功するために、“initialize”:“true” が設定されて QoS をパスする必要があるメンバー予約の最小数です。

初期化エピソード

memberInitialization オブジェクトが設定されている場合、MPSD は初期化フェーズをエピソードごとに進めます。 最初のエピソードはセッションが作成されたときに開始され、テンプレートで定義されたすべてのフェーズを含みます。 エピソードが既に実行中に招待または参加した新しいメンバーは、次のエピソード用にマークされます。 エピソードや memberInitialization 全般の状態は、セッションの initializing オブジェクトから取得できます。 注意 このオブジェクトは初期化完了後に削除されることに注意してください。 例:
ステージは joining から measuring、evaluating へと進みます。 エピソードが失敗した場合、ステージは failed に設定され、セッションは初期化できません。 それ以外の場合、初期化エピソードが完了すると、initializing オブジェクトは削除されます。 初期化の失敗は、各メンバーごとに追跡することもできます。 それらは、このメンバーがパスしなかった場合に joining または measuring ステージから移行する際に設定されます。 例:
優先順位順に、この属性の値は timeout、latency、bandwidthdown、bandwidthup、network、group、または episode に設定できます。 network 値は、ネットワーク構成および/または条件 (競合するネットワーク アドレス変換 [NAT] など) が QoS メトリックの測定を妨げたことを意味します。 joining の終了時に唯一可能な値は group です。 (joining のタイムアウトから、予約は削除されます。) memberInitialization が設定されており、メンバーが “initialize”: true で追加された場合、これはメンバーが参加する初期化エピソードに設定されます。作成時に新しいセッションに追加されたメンバーには 1 の値が使用され、初期化エピソードが終了すると削除されます。

マッチ チケット セッション

MPSD セッションがマッチ チケット セッションとして使用される場合、いくつかの特別なセッション プロパティおよび定数が使用されます。 /members//constants/system
Matchmaking サービスがユーザーをセッションに追加する場合、matchmakingResult フィールドに、それらがどのようにそしてなぜセッションにマッチされたかに関するコンテキストを提供します。
これは、マッチメイキング セッションからのユーザーの serverMeasurements のコピーです。

Quality of Service (QoS) テンプレート

ゲーム セッション テンプレートには、MPSD にネットワーク レイヤーおよびコンソール ソーシャル機能と連携するように通知する値を追加できます。 この連携の目的は、セッションが作成される前、およびゲームに参加準備完了とユーザーに通知される前に、接続状態の品質を検証することです。 以下のコード抜粋は、QoS を使用したピアツーホスト ゲーム セッション テンプレートの例です。
このコード抜粋は、QoS を使用したピアツーピア ゲーム セッション テンプレートの例です。

QoS セッション テンプレート属性

memberInitialization オブジェクトが設定されている場合、セッションはクライアント システムまたはタイトルがセッション作成後および/または新しいメンバーがセッションに参加する際に初期化を実行することを想定します。 タイムアウトと初期化ステージは、任意のメトリックが設定されている場合の QoS 測定を含め、セッションによって自動的に追跡されます。 これらのタイムアウトは、initializationEpisode プロパティが設定されているメンバーに対して、セッションの reservation および ready タイムアウトをオーバーライドします。
QoS を持つゲーム セッションには connectivity capability が必要です。 メトリックが指定されていない場合は、QoS 要件を満たすために必要なものにデフォルト設定されます。 指定されている場合は、QoS 要件を満たすのに十分でなければなりません。
以下のしきい値は、セッション内のすべてのメンバーの各ペアワイズ接続に適用されます。
以下のしきい値は、ホスト候補からの各接続に適用されます。
以下の潜在的なサーバー接続文字列を評価する必要があります (接続文字列は小文字である必要があることに注意してください)。
members//properties/system これらのフラグはメンバーのステータスと activeTitle を制御し、相互に排他的です (両方を true に設定するとエラーになります)。 それぞれについて、false は “存在しない” と同じです。デフォルトのステータスは “inactive”、つまりどちらも存在しないことです。

QoS フェーズおよびセッション初期化の詳細

MPSD は、テンプレートがメンバー初期化を完了した後、ゲーム作成のための QoS 結果を追跡およびレポートします。 この操作の進行状況は、上記の メンバー初期化 セクションで説明したように、セッション ドキュメントの initializing オブジェクトによって表されます。 initializing オブジェクトには stage 属性があり、これは初期化の現在のステージを表します。 ステージは joining から measuring、evaluating へと進みます。
  • 初期化エピソード #1 が失敗した場合、ステージは failed に設定され、セッションは初期化できません。それ以外の場合、初期化エピソードが完了すると、“initializing” オブジェクトは削除されます。externalEvaluation が false に設定されている場合、evaluating ステージはスキップされます。metrics と measurementServerAddresses のどちらも設定されていない場合、measuring ステージはスキップされます。
  • ホスト候補は、優先順に一覧表示されたデバイス トークンです。これらは、peerToHostRequirements が設定されており、/properties/system/host が設定されていない場合、初期化エピソード #1 の measuring ステージの後に設定されます。/properties/system/host オブジェクトが設定された後にクリアされます。
  • gamertag 属性は、メンバーが受諾しており、そのメンバーの ゲーマータグ クレームが見つかった場合にのみ設定されます。
  • deviceToken 属性は、メンバーがセキュア デバイス アドレスをアップロードするときに設定されます。等価比較に使用できる大文字と小文字を区別しない文字列です。
  • reserved 値は、ユーザーがセッション ドキュメントに対する最初の PUT リクエストを実行した後に削除されます。プレイヤーが予約された状態のとき、それは彼らがゲーム セッションに招待されているが、まだ受諾もしていなければ接続も評価されていないことを意味します。
  • メンバーがアクティブな場合、activeTitleId は、メンバーがアクティブになっているタイトルを 10 進数で示します。
  • この属性は、ユーザーがセッションに参加した時刻を指します。reserved が true の場合、joinTime は予約が行われた時刻になります。
  • このメンバーが properties/system/turn 配列に含まれている場合に存在し、そうでない場合は存在しません。
  • initializationFailure 属性は、メンバーがそのステージを正常にパスしなかった場合、joining または measuring ステージから移行するときにメンバー オブジェクトに設定されます。優先順位順に、timeout、latency、bandwidthdown、bandwidthup、network、group、または episode に設定できます。 network 値は、ネットワーク構成および/または条件 (競合するネットワーク アドレス変換 [NAT] など) が QoS メトリックの測定を妨げたことを意味します。joining の終了時に唯一可能な値は group です。(joining のタイムアウトから、予約は削除されます。) episode 値は、joining または measuring ステージで失敗しなかった初期化エピソードのすべてのメンバーに対して、“evaluation” ステージが失敗した後に設定されます。
  • memberInitialization が設定されており、メンバーが “initialize”: true で追加された場合、これはメンバーが参加する初期化エピソードに設定されます。作成時に新しいセッションに追加されたメンバーには 1 の値が使用されます。初期化エピソードが終了すると削除されます。
  • next 属性は、セッション内の次のメンバーのインデックス値を表します。追加するメンバーがこれ以上ない場合、以下の membersInfo オブジェクト内の next 属性と同じ値になります。

XBOX Cloud Compute セッション (非推奨)

XBOX Cloud Compute セッションには、セッションがゲーム サーバーへの接続に使用できる大文字と小文字を区別しない接続文字列の順序付きリストが含まれます。 一般に、タイトルはリストの最初の文字列を使用する必要がありますが、洗練されたタイトルはカスタム メカニズム (たとえば、負荷に基づく) を使用して他のいずれかを選択できます。
**/servers//properties/system **

Raw セッションおよびカスタム タイトル プロパティ

セッションは、マルチプレイヤー ゲームに関するカスタム ハウスキーピング情報 (メタデータ) を保存するために使用できます。 ゲーム データや保存された情報は TMS++ に保存する必要があります。

プロパティ バッグ

上記のプロパティ バッグとしてマークされたオブジェクトはそれぞれ、system と custom という 2 つのオプションの内部オブジェクトから構成されます。 custom オブジェクトには任意の JSON を含めることができます。

アクティブ メンバーの減衰

MPSD がユーザーがタイトルに関与していないことを検出すると、アクティブ メンバーは自動的に非アクティブとマークされます。 これは、たとえば Presence がユーザー レコードをタイムアウトした場合に発生する可能性があります。 このメカニズムはあくまでバックストップです。つまり、タイトルはメンバーがタイトルから離れたり切り替えたり、サインアウトしたり、その他の方法で関与しなくなった場合に、それらのメンバーを非アクティブとしてマークする (またはセッションから削除する) ことを引き続き積極的に行う必要があります。

FAQ とトラブルシューティング

MPSD を呼び出すにはどうすればよいですか?

証明書認証の使用: client-sessiondirectory.xboxlive.com 例:
XToken 認証の使用: sessiondirectory.xboxlive.com 例:

使用する SCID、セッション テンプレート、サンドボックスはどうやって調べればよいですか?

この情報は、タイトルの Partner Center で確認できます。 まだ Partner Center へのアクセス権をお持ちでない場合は、開発者アカウント マネージャーに連絡してください。情報を取得するお手伝いをします。

自分のリクエスト本文と比較できるリクエスト本文の例はありますか?

MPSD を呼び出すと 404 エラーが発生します。

Fiddler トレースを収集して詳細情報を取得し、次を実行してください:
  1. HttpResponse 本文の一部として返されたメッセージで、一般的な 404 メッセージを確認します。
    • The requested service config is either invalid or not configured for sessions。使用されている SCID が正しいことを確認します。
    • The requested session wasn’t found。取得する前にセッションが作成されており、セッション テンプレートが正しいことを確認します。PUT 呼び出しでセッションを作成できます。
  2. 使用している URI を確認します。
  3. コンソールを再起動するか、新しいユーザーで再試行します。

MPSD を呼び出すと 403 エラーが発生します。

これは通常、権限またはスコープの問題です。 Fiddler トレースを収集して詳細情報を取得し、次を実行してください:
  1. HttpResponse 本文の一部として返されたメッセージで、一般的な 403 メッセージを確認します。
  • The requested service config cannot be accessed.
    • サンドボックスにアクセス権を持つアカウントを使用していることを確認します。
    • 正しいサンドボックス内にいることを確認します。
    • 証明書認証を使用していてこのエラーが発生した場合は、DAM に連絡してください。
  • The requested session cannot be accessed. Private Sessions can only be read by members of the session.
    • 可視性が “private” のセッションにアクセスしようとしています。セッション内のメンバーのみがセッション ドキュメントを読むことができます。
  • The request body can’t contain existing member references unless the authentication principal includes a server.
    • ユーザーの代わりに他のユーザーをセッションに参加させることはできません。招待のみ可能です。プレイヤーを招待するには、インデックスを “reserve_<number>” に設定します。

412 Precondition Failed エラーが発生します。

セッションが既に存在する場合、これは 412 Precondition Failed を返します:
セッションの etag が If-Match ヘッダーと一致しない場合、これは 412 Precondition Failed を返します:

MPSD を呼び出すと 405、409、503、400 などのエラーが発生します。

Fiddler トレースを収集して詳細情報を取得し、HttpResponse 本文の一部として返されたメッセージを確認します。 XSAPI を使用している場合、HCSettingsSetTraceLevel プロパティを HCTraceLevel::Information に設定することで応答本文を取得することもできます。HCTraceSetTraceToDebugger が設定されている場合はデバッグ出力に情報が出力されます。または、HCTraceSetClientCallback を使用して、ゲーム独自のトレース ログにトレース ログを追加できるコールバックを取得できます。また、XblAddServiceCallRoutedHandler を使用して、各サービス呼び出しに対して呼び出されるようにし、独自のログにルーティングすることもできます。

タイトルのテンプレートで何を変更できますか、または変更する必要がありますか?

セッション テンプレートはデフォルトではなく、むしろ型のようなものです。 ただし、テンプレートで既に設定されている定数をオーバーライドすることはできませんが、追加することはできます。

セッションが初期化されていないというエラーが表示されます。

メンバー初期化がテンプレートに存在する場合 (通常はゲーム、パーティ、およびマッチ チケットのシナリオ)、この問題を解決するには、QoS をパスするのに十分な数のメンバー予約 (start に必要なメンバー数) に “initialize=true” が設定されていることを確認する必要があります。

セッションが作成されず、HTTP 204 エラーが発生します。

これは、セッションを作成したときにセッションに追加されたユーザーがいなかったことを示します。 作成時にセッションのユーザーがいない場合、セッションは作成されません。 作成時に少なくとも 1 人のプレイヤーをセッションに追加していることを確認します。 専用サーバー シナリオでは、マッチを作成しようとしている、またはマッチを作成する必要があるプレイヤーを取得し、そのユーザーをそのマッチの初期プレイヤーにします。 あるいは、sessionEmptyTimeout を変更または削除することもできます。

MPSD をポーリングするタイミングは?

MPSD セッションのポーリングは避けるべきです。 高レベルでは、各クライアントのネットワーク接続の初期確立、および接続を失ったクライアントのためのネットワーク状態の再確立にのみ MPSD セッションを使用する方法でコードを設計することによってこれを行うことができます。 競合状態を解決するためにセッション状態を更新する必要をなくすため、MPSD の etag ベースの同期プリミティブを活用することも重要です。 これらの原則の一般的な適用は、N クライアントのセットがすべて接続してピアツーピア メッシュでプレイする必要がある場合です。 新しいメンバーのためにセッションを定期的にクエリするのではなく、各メンバーはセッションに参加し、既にセッションにいるメンバーに接続し、後の参加者も同じことをすると想定できます。 これを実装する方法の例については、Chat および Player Rendezvous サンプルを参照してください。 短期間ポーリングが必要になるまれなケースもあります。これが必要だと思われる場合は、開発者アカウント マネージャーに連絡してください。
最終更新日 2026年10月20日