> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Using Server Backfill Tickets - REST API

> REST API を通じて PlayFab マッチメイキングのバックフィル チケットを作成・管理し、進行中のマッチにプレイヤーを追加してゲーム サーバーを埋めた状態に保ちます。

<Note>
  Multiplayer SDK の使用を強く推奨します。リアルタイム メッセージのサポートが含まれており、ポーリングの必要性が低減され、マッチメイキング体験が改善し、遅延が減少します。[サーバー バックフィル チケットの使用 - Multiplayer SDK](/services/playfab/multiplayer/matchmaking/backfill-tickets-multiplayer-sdk)
</Note>

サーバー上でホストされているゲームでは、追加のプレイヤーを探す必要が生じることがあります。多くの場合、これはゲームが進行中に 1 人以上のプレイヤーが切断したときに起こります。サーバー バックフィル チケットにより、ゲーム サーバーは現在プレイ中のゲームに適合する追加のプレイヤーを検索できます。

サーバー バックフィル チケットは、通常のマッチメイキング チケットとは以下の点で異なります。

1. マッチング
   * バックフィル チケットは互いにマッチできません。
   * バックフィル チケットは検索時に優先されます。これにより、プレイヤーベースの断片化が軽減されます。
2. コントラクト
   * バックフィル チケットは `ServerDetails` フィールド付きで作成できます。これによりサーバーは、マッチしたプレイヤーがどのように接続すべきかを示すことができます。
   * バックフィル チケットはチーム割り当てを伴って作成できます。これによりチームのあるゲームでは、チーム情報を維持できます。
3. キューのプロパティ
   * バックフィル チケットは [Multiplayer Server の割り当て](/services/playfab/multiplayer/matchmaking/multiplayer-servers) をトリガーしません。
   * バックフィル チケットは [キュー統計](/services/playfab/multiplayer/matchmaking/display-statistics) には反映されません。これは、それらのプレイヤーは既にゲームをプレイ中であり、待ち時間を不正確に偏らせるためです。
4. 所有権
   * バックフィル チケットはユーザーではなく、ゲーム サーバーが所有します。ユーザーはバックフィル チケットを表示したり操作したりすることはできません。

## サーバー バックフィル チケットを作成する

バックフィル プロセスの開始は通常のマッチメイキング チケットの作成と類似していますが、[CreateServerMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.createservermatchmakingticket) 呼び出しの代わりに [CreateServerBackfillTicket](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/matchmaking/create-server-backfill-ticket) 呼び出しを使う点が異なります。ゲーム サーバーは、現在ホスト中のゲームのすべてのメンバー情報を提供する必要があります。これは、前回のマッチ結果で返された属性を保存することで最も効率的に実行できます。これらの属性は、`ReturnMemberAttributes` フラグを付けて [GetMatch](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatch) を呼び出すことで取得できます。あるいは、ゲーム サーバーはユーザーに属性情報を問い合わせることもできます。

メンバーに加えて、ゲーム サーバーは 2 つの追加情報を指定できます。

### ServerDetails

この構造体は、[GetMatch](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatch) 呼び出しで返される構造体と同一で、サーバーへの接続に必要な任意の情報を指定できます。バックフィル チケットがマッチされると、その [ServerDetails](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatch#serverdetails) 構造体は、生成されたマッチに対して [GetMatch](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatch) を呼び出したすべてのプレイヤーに返されます。この構造体のすべてのフィールドは任意です。タイトルは、クライアントがゲーム サーバーに接続するのに十分な情報を提供するために、これらの一部しか必要としない場合があります。

<Note>
  `IPV4Address` フィールドは検証されず、クライアントに任意の接続文字列情報を提供するために使用できます。
</Note>

```json theme={null}
{
  "ServerDetails": {
    "IPV4Address": "123.234.123.234",
    "Ports": [
      {
        "Port": {
          "Name": "portname",
          "Num": 12345,
          "Protocol": "UDP"
        }
      }
    ],
    "Region": "EastUS"
  }
}
```

### チーム割り当て

チーム機能付きのキューにバックフィル チケットが送信される場合、各メンバーには現在所属するチームを示す TeamId も指定できます。このメンバーシップは、マッチが返されたときも維持されます。ユーザーに対して TeamId が指定されていない場合、任意のチームに配置される可能性があります。

```json theme={null}
{
  "Members": [
    {
      "TeamId": "red",
      "Entity": {
        "Id": "6570DE3537DC9DF6",
        "Type": "title_player_account",
        "TypeString": "title_player_account"
      },
      "Attributes": {
        "DataObject": {
          "Skill": 25
        }
      }
    }
  ]
}
```

## バックフィル チケットとのやり取り

作成されると、バックフィル チケットはルール条件を満たす通常のマッチメイキング チケットの検索を開始します。バックフィル チケットのフローは、対応する API を使用する点を除いて、通常のマッチメイキング チケットの動作と同じです。ゲーム サーバーは、[GetServerBackfillTicket](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/matchmaking/create-server-backfill-ticket) を呼び出してチケットのステータスを確認できます。また、[CancelServerBackfillTicket](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/matchmaking/cancel-server-backfill-ticket?view=playfab-rest) を呼び出してチケットをキャンセルすることもできます。

<Note>
  クライアントは自分が含まれているバックフィル チケットをキャンセルすることはできません。たとえば、あるクライアントが 4 対 4 のマッチに参加していて、対戦相手チームのプレイヤーが離脱した場合を考えます。そのクライアントが自分の含まれるバックフィル チケットを継続的にキャンセルすることで、優位性を維持できてしまいます。これを防ぐため、バックフィル チケットをキャンセルできるのはゲーム サーバーのみです。
</Note>

## メンバーシップの制限と失われたバックフィル チケットからの回復

通常のマッチメイキング チケットと同様に、ユーザーはキューあたり同時に 1 つのバックフィル チケットにしか参加できません。この上限は、クライアントが制御する通常のチケットとは別に追跡されます。

ゲーム サーバーがバックフィル チケットを作成した後にクラッシュした場合、失われたバックフィル チケット内のユーザーは、メンバーシップ制限のため、別のバックフィル チケットに登録できなくなります。ゲーム サーバーは、`errorDetails` 本体に未処理のバックフィル チケットに含まれるユーザーのリストとともにエラー `MatchmakingTicketMembershipLimitExceeded` を受信することで、この状況を検出します。

```json theme={null}
{
    "code": 400,
    "status": "BadRequest",
    "error": "MatchmakingTicketMembershipLimitExceeded",
    "errorCode": 2055,
    "errorMessage": "User is a member of too many backfill tickets.",
    "errorDetails": {
        "UsersExceedingMembershipLimit": [
            "title_player_account!562D72A5B184F612"
        ]
    }
}
```

ゲーム サーバーは、[CancelAllServerBackfillTicketsForPlayer](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/matchmaking/cancel-all-server-backfill-tickets-for-player) を呼び出してユーザーが所属するすべてのバックフィル チケットを削除することで、この状況からユーザーを回復できます。プレイヤーが参加している可能性のあるバックフィル チケットを検出する方法として、[ListServerBackfillTicketsForPlayer](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/matchmaking/list-server-backfill-tickets-for-player) も提供されています。

## Region Selection Rule との相互作用

Region Selection ルールは通常、チケットに属性としてレイテンシ計測値の配列を指定するよう要求します。ただし、バックフィル チケットは特定のデータセンターで既に進行中のゲームを表します。レイテンシ計測の配列の代わりに、作成される要求では [ServerDetails](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatch#serverdetails) 構造体で Region を指定する必要があります。チケットがバックフィル チケットとマッチするには、バックフィル チケットで指定されたリージョンに対して許容できる ping 時間を持っている必要があります。

## Team Ticket Size Similarity Rule との相互作用

Team Ticket Size Similarity ルールは、大きなグループのプレイヤーを他の大きなグループのプレイヤーとマッチさせることを保証します。ただし、バックフィル チケットには、どのプレイヤーがグループとしてゲームに参加したかの情報は含まれていません。したがって、バックフィル チケットのマッチング時には、Ticket Size Similarity ルールは無視されます。


## Related topics

- [Using Server Backfill Tickets - Multiplayer SDK](/ja-jp/services/playfab/multiplayer/matchmaking/backfill-tickets-multiplayer-sdk.md)
- [CreateServerBackfillTicket](/ja-jp/services/playfab/multiplayer/lobby/unity-multiplayer-api-reference/PlayFab.Multiplayer/PlayFabMultiplayer.PlayFabMultiplayerServer/CreateServerBackfillTicket.md)
- [PFMultiplayerCreateServerBackfillTicket](/ja-jp/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmatchmaking/functions/pfmultiplayercreateserverbackfillticket.md)
- [PFMatchmakingServerBackfillTicketConfiguration](/ja-jp/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmatchmaking/structs/pfmatchmakingserverbackfillticketconfiguration.md)
- [PlayFab リリースノート 2020](/ja-jp/services/playfab/release-notes/2020.md)
