Verwenden von Serverbackfill-Tickets
Spiele, die auf einem Server gehostet werden, stellen manchmal fest, dass sie nach zusätzlichen Spielern suchen müssen. Am häufigsten tritt dies auf, wenn ein oder mehrere Spieler die Verbindung trennen, während das Spiel ausgeführt wird. Server-Backfill-Tickets ermöglichen es einem Spielserver, nach zusätzlichen Spielern zu suchen, die in das aktuell gespielte Spiel passen.
Serverbackfill-Tickets unterscheiden sich in vielerlei Hinsicht von regulären Matchmaking-Tickets:
- Passende
- Backfill-Tickets können nicht miteinander übereinstimmen.
- Backfill-Tickets werden während der Suche vorrangig gewährt. Dadurch wird die Fragmentierung der Spielerbasis reduziert.
- Vertrag
- Backfill-Tickets können mit einem
ServerDetails
Feld erstellt werden. Dadurch kann der Server angeben, wie übereinstimmende Spieler eine Verbindung mit dem Server herstellen sollen. - Backfill-Tickets können mit Teamzuweisungen erstellt werden. Dadurch können Spiele mit Teams ihre Teaminformationen verwalten.
- Backfill-Tickets können mit einem
- Warteschlangeneigenschaften
- Backfill-Tickets lösen keine Multiplayerserverzuordnung aus.
- Backfill-Tickets werden nicht in Warteschlangenstatistiken wider, da ihre Spieler bereits ein Spiel spielen und die Wartezeit ungenau schief gehen würden.
- Besitzer
- Backfill-Tickets sind im Besitz eines Spieleservers und nicht eines Benutzers. Benutzer können keine Rückfülltickets anzeigen oder damit interagieren.
Erstellen eines Serverbackfill-Tickets
Der Abgleichsprozess beginnt ähnlich wie das Erstellen eines regulären Matchmaking-Tickets, jedoch mit dem CreateServerBackfillTicket-Aufruf im Gegensatz zu einem CreateServerMatchmakingTicket-Aufruf . Der Spielserver muss alle Mitgliedsinformationen für das Spiel bereitstellen, das er derzeit hosten wird. Dies erfolgt am effizientesten, indem die im vorherigen Übereinstimmungsergebnis zurückgegebenen Attribute gespeichert werden. Diese Attribute können durch Aufrufen von GetMatch mit dem ReturnMemberAttributes
Flag abgerufen werden. Alternativ kann der Spielserver die Benutzer nach Attributinformationen abfragen.
Zusätzlich zu den Mitgliedern kann der Spielserver zwei zusätzliche Informationen angeben.
ServerDetails
Diese Struktur ist identisch mit der Struktur, die in einem GetMatch-Aufruf zurückgegeben wird, und ermöglicht es dem Server, alle Informationen anzugeben, die für die Verbindung mit dem Server erforderlich sind. Wenn das Backfill-Ticket abgeglichen wird, wird die ServerDetails-Struktur an alle Spieler zurückgegeben, die GetMatch für die resultierende Übereinstimmung aufrufen. Alle Felder in dieser Struktur sind optional. Titel benötigen möglicherweise nur eine Teilmenge davon, um genügend Informationen bereitzustellen, damit Clients eine Verbindung mit dem Spielserver herstellen können.
Notiz
Das IPV4Address
Feld wird nicht überprüft und kann verwendet werden, um beliebige Verbindungszeichenfolge Informationen an Clients bereitzustellen.
{
"ServerDetails": {
"IPV4Address": "123.234.123.234",
"Ports": [
{
"Port": {
"Name": "portname",
"Num": 12345,
"Protocol": "UDP"
}
}
],
"Region": "EastUS"
}
}
Teamzuweisungen
Wenn das Backfill-Ticket an eine Warteschlange mit Teams übermittelt wird, kann jedes Mitglied auch mit einer TeamId angegeben werden, die das Team angibt, in dem es sich gerade befindet. Diese Mitgliedschaft wird beibehalten, wenn eine Übereinstimmung zurückgegeben wird. Wenn eine TeamId für einen Benutzer nicht angegeben ist, kann sie in jedem Team platziert werden.
{
"Members": [
{
"TeamId": "red",
"Entity": {
"Id": "6570DE3537DC9DF6",
"Type": "title_player_account",
"TypeString": "title_player_account"
},
"Attributes": {
"DataObject": {
"Skill": 25
}
}
}
]
}
Interagieren mit einem Backfill-Ticket
Nach der Erstellung beginnt ein Backfill-Ticket mit der Suche nach regulären Matchmaking-Tickets, die die Regelkriterien erfüllen. Der Ablauf für Backfill-Tickets ist mit der Funktionsweise regulärer Matchmaking-Tickets identisch, mit Ausnahme von analagous-APIs. Der Spielserver kann die status seines Tickets überprüfen, indem er GetServerBackfillTicket aufruft. Sie kann das Ticket auch durch Aufrufen von CancelServerBackfillTicket stornieren.
Notiz
Kunden dürfen ein Backfill-Ticket, in dem sie sich befinden, nicht stornieren. Angenommen, ein Client war in einem 4-gegen-4-Spiel, und ein Spieler des gegnerischen Teams wurde fallen gelassen. Der Kunde konnte seinen Vorteil beibehalten, indem er alle Rückfülltickets, in der er sich befand, kontinuierlich stornierte. Um dies zu verhindern, dürfen nur Spielserver Rückfülltickets stornieren.
Mitgliedschaftsbeschränkungen und Wiederherstellung von verloren gegangenen Backfill-Tickets
Ähnlich wie bei regulären Matchmaking-Tickets kann sich ein Benutzer jederzeit nur in einem Backfill-Ticket pro Warteschlange befinden. Dieses Limit wird getrennt von den regulären Tickets nachverfolgt, die ein Client steuert.
Falls ein Spielserver ein Backfill-Ticket erstellt und dann abstürzt, können alle Benutzer im verlorenen Backfill-Ticket aufgrund des Mitgliedschaftslimits nicht in einem anderen Nachfüllticket eingereicht werden. Ein Spielserver erkennt dies, indem er den Fehler MatchmakingTicketMembershipLimitExceeded
zusammen mit einer Liste von Benutzern empfängt, die angibt, welche ausstehenden Backfill-Tickets in einem errorDetails
Textkörper enthalten.
{
"code": 400,
"status": "BadRequest",
"error": "MatchmakingTicketMembershipLimitExceeded",
"errorCode": 2055,
"errorMessage": "User is a member of too many backfill tickets.",
"errorDetails": {
"UsersExceedingMembershipLimit": [
"title_player_account!562D72A5B184F612"
]
}
}
Der Spielserver kann einen Benutzer aus dieser Situation wiederherstellen, indem er CancelAllServerBackfillTicketsForPlayer aufruft, wodurch alle Backfill-Tickets entfernt werden, in denen sich der Benutzer befindet. ListServerBackfillTicketsForPlayer wird auch als Methode bereitgestellt, um zu ermitteln, in welchen Backfill-Tickets sich ein Spieler befinden kann.
Interaktionen mit der Regionsauswahlregel
Die Regel für die Regionsauswahl erfordert normalerweise, dass Tickets ein Array von Latenzmessungen für ihr Attribut angeben. Ein Nachfüllticket stellt jedoch ein Spiel dar, das in einem bestimmten Rechenzentrum bereits ausgeführt wird. Anstelle eines Arrays von Latenzmessungen muss die Erstellungsanforderung eine Region in der ServerDetails-Struktur angeben. Damit Tickets mit dem Abfüllticket übereinstimmen, müssen sie über eine akzeptable Pingzeit für die region verfügen, die durch das Backfill-Ticket angegeben wird.
Interaktionen mit der Teamticketgröße-Ähnlichkeitsregel
Die Teamticketgrößen-Ähnlichkeitsregel erzwingt, dass große Gruppen von Spielern mit anderen großen Gruppen von Spielern abgeglichen werden. Backfill-Tickets enthalten jedoch nicht die Informationen darüber, welche Spieler dem Spiel als Gruppe beigetreten sind. Daher wird die Ticketgrößenähnlichkeitsregel beim Abgleich von Backfill-Tickets ignoriert.