Behandeln häufiger Fehlerfälle
PlayFab Matchmaking bietet eine einfache Schnittstelle zum Eingeben und Verlassen des Matchmakings. Trotzdem gibt es immer noch mehrere Punkte, an denen die Dinge möglicherweise nicht nach Plan laufen. Einige der häufigeren Fehlerfälle werden unten zusammen mit der Art und Weise gezeigt, wie ein Titel sie behandeln sollte.
Auf dieser Seite wird davon ausgegangen, dass Sie mit dem allgemeinen Ablauf des PlayFab-Matchmakings vertraut sind. Weitere Informationen finden Sie in unserem Schnellstart zum Matchmaking zur allgemeinen Verwendung von Matchmaking.
Fehler bei der Ticketerstellung
Die Ticketerstellung kann aus verschiedenen Gründen fehlschlagen. In den meisten fällen identifiziert der PlayFab-Fehlercode etwas Ungültiges an der Übermittlungsanforderung. Wenn Sie dies korrigieren, können Sie die Übermittlung erfolgreich durchführen.
Notiz
Die Fehler MatchmakingAttributeInvalid
und MatchmakingPlayerAttributesInvalid
weisen auf ein Problem mit der Formatierung von Attributen hin. Weitere Informationen finden Sie im Abschnitt zum Angeben von Ticketattributen , um details zum Übergeben von Attributen in einem Ticket zu erhalten.
Andere Fehlercodes deuten darauf hin, dass die Anforderung gültig ist, aber Umstände außerhalb der Anforderung verhindern, dass das Ticket akzeptiert wird. Dies sind insbesondere:
-
MatchmakingRateLimitExceeded
- Dies deutet darauf hin, dass Sie Tickets zu häufig übermittelt haben. Weitere Informationen finden Sie im abschnitt unten . -
MatchmakingTicketMembershipLimitExceeded
– Gibt an, dass sich der Benutzer bereits in einem anderen aktiven Ticket befindet. Benutzer dürfen nicht gleichzeitig in mehr als einem Ticket in einer Warteschlange sein, da sie nicht zwei Spiele gleichzeitig spielen können. Weitere Informationen finden Sie weiter unten im ausführlicheren Abschnitt zur Behebung dieser Situation.
Wenn Sie den HTTP-Fehlercode 503 erhalten, wiederholen Sie ihre Anforderung nach einer kurzen Verzögerung.
Der Aufruf gibt MatchmakingRateLimitExceeded zurück.
Ähnlich wie bei anderen PlayFab-Features schränkt die PlayFab-Matchmaking die Anzahl der Anrufe ein, die Sie tätigen, entsprechend den im Spiel-Manager konfigurierten Grenzwerten. Der Fehler gibt an, MatchmakingRateLimitExceeded
dass der Titel den Grenzwert für diesen Aufruftyp überschritten hat.
Beim Matchmaking tritt dies am häufigsten auf, wenn GetMatchmakingTicket abgefragt wird, um festzustellen, ob ein Ticket übereinstimmt.
Um diesen Fehler zu vermeiden, erhöhen Sie entweder Ihren Grenzwert oder verringern Sie die Anruffrequenz.
Notiz
Obwohl die Antwort den HTTP-status Code 429 aufweist, ist die Anforderung selbst gültig und kann trotzdem wiederholt werden.
Beim Erstellen oder Beitreten zu einem Ticket wird MatchmakingTicketMembershipLimitExceed zurückgegeben.
Bei der PlayFab-Matchmaking kann sich ein Benutzer jeweils nur in einem Ticket pro Warteschlange befinden, um einen Fall zu vermeiden, in dem ein Benutzer zwei Übereinstimmungen eingibt und entscheiden muss, welches Ticket berücksichtigt werden soll. Unabhängig davon, welches Spiel nicht berücksichtigt wird, ist es kurz ein Spieler, und seine Spieler werden wahrscheinlich gezwungen sein, wieder in das Matchmaking einzusteigen. Der Fehler MatchmakingTicketMembershipLimitExceeded
wird zurückgegeben, wenn sich ein Benutzer bereits in einem Ticket befindet, das nicht abgebrochen oder abgeglichen ist, aber versucht, ein anderes Ticket zu erstellen oder zu beitreten.
Es kann jedoch vorkommen, dass ein Titel oder Server den Überblick über ein Ticket verliert, entweder durch Absturz, Neustart oder andere unvorhergesehene Fehler. In diesem Fall verbleibt ein aktives Ticket, das weder dem Benutzer noch dem Titel bekannt ist.
Dieses verlorene Ticket verhindert, dass zukünftige Tickets für diesen Benutzer übermittelt werden, bis es abläuft. In diesem Fall stehen zwei Optionen zur Verfügung, um das Problem zu beheben:
Option 1: Löschen des Tickets aus der Matchmaking
Alle vorhandenen Tickets eines Benutzers stornieren. Durch Aufrufen von CancelAllMatchmakingTicketsForPlayer wird diese Aufgabe ausgeführt. Danach werden keine Tickets mehr erstellt, und sie sind bereit für die Erstellung eines neuen Tickets.
Option 2: Suchen des verlorenen Tickets
Suchen Sie das vorhandene Ticket des Benutzers, und verwenden Sie es weiter. Beim Aufrufen von ListMatchmakingTicketsForPlayer werden alle Matchmaking-Ticket-IDs zurückgegeben, in der der Benutzer Mitglied ist. Das Aufrufen von GetMatchmakingTicket für jede bereitgestellte ticketId ermöglicht es Ihnen, den Status abzurufen und weiter zu überwachen, bis eine Übereinstimmung gefunden wird.
Nicht alle Spieler nehmen an einem Mehrbenutzerticket teil
Beim Erstellen eines Mehrbenutzertickets kann einer der eingeladenen Spieler scheitern oder die Teilnahme verweigern. In einem solchen Fall verbleibt das erstellte Ticket im status WaitingForPlayers, bis es abläuft. Titel sollten diese Situation von Zeit zu Zeit erwarten und ein relativ kurzes Timeout auf der Benutzeroberfläche festlegen.
Nach diesem Timeout sollte der Titel das Ticket stornieren und überprüfen, ob alle Spieler noch zugestimmt haben, ein Spiel zusammen zu spielen.
GetMatch gibt nicht gefunden zurück.
Sobald eine Übereinstimmung erstellt wurde, lebt die Übereinstimmung für eine bestimmte Zeit und altert schließlich aus. Wenn die Übereinstimmung nicht rechtzeitig abgerufen wird, müssen diese Benutzer Tickets erneut übermitteln, um erneut abgeglichen zu werden. Dies kann vermieden werden, indem sichergestellt wird, dass Übereinstimmungen rechtzeitig (d. a. innerhalb weniger Minuten) abgerufen werden.
Wenn Sie Matchmaking und Lobby wie hier beschrieben zusammen verwenden, ist es möglich, dass der lobbyArrangementString für einen Zeitraum gültig ist, nachdem das Match hier ausläuft. Stellen Sie sicher, dass Sie die Informationen aus GetMatch abrufen und verwenden, bevor sie ablaufen.
Das Ticket wird storniert.
Tickets können aus mehreren Gründen storniert werden. Die häufigsten Fälle sind Stornierungen von Benutzern und ablaufende Tickets, aber das Ticket kann auch vom Server storniert werden. Wenn Sie aufrufen GetMatchmakingTicket
und feststellen, dass Ihr Ticket storniert wurde, wird der Grund im CancellationReason
Feld aufgeführt. Die möglichen CancellationReason
Antworten sowie mögliche Lösungen sind unten aufgeführt.
CancellationReason | Beschreibung | Auflösung |
---|---|---|
Benutzer | Vom Benutzer storniertes Matchmaking-Ticket | Vorsätzliche. Create auf Wunsch ein neues Ticket. |
Server | Vom Dienst storniertes Matchmaking-Ticket über die Server-API | Vorsätzliche. Create auf Wunsch ein neues Ticket. |
Auszeit | Das Ticket ist durch Erreichen von GiveUpAfterSeconds abgelaufen. | Versuchen Sie es mit einem neuen Ticket erneut, und passen Sie die Ticketattribute bei Bedarf an. |
ServerAllocationFailed | Warteschlange ordnet Server zu, aber bei der Zuordnungsanforderung ist ein Fehler aufgetreten. | Bestätigen Sie die in Regionen verfügbaren Standbyserver, und versuchen Sie es erneut mit einem neuen Ticket. |
TicketUnmatchable | Die Kombination aus den Ticketparametern und den Regeln für die Warteschlange macht dieses Ticket nicht ansprechbar. | Passen Sie entweder die Ticketattribute oder die Warteschlangenkonfiguration so an, dass sie kompatibel sind. |
RetryRequired | Interner vorübergehender Matchmaking-Fehler | Versuchen Sie es mit einem neuen Ticket erneut, wahrscheinlich aufgrund eines Zeitsteuerungsproblems, das bei der nächsten Anforderung behoben werden sollte. |
Intern | Interner Matchmaking-Dienstfehler | Versuchen Sie es erneut mit einem neuen Ticket. |
Beim Abbrechen eines Tickets wird ein Fehler zurückgegeben.
Das Stornieren eines Tickets ist nicht garantiert erfolgreich. Während die meisten Fehler selbsterklärend sind, weist der Fehler MatchmakingTicketAlreadyCompleted
auf eine von zwei Möglichkeiten hin:
- Das Ticket wurde bereits storniert.
- Das Ticket wurde bereits abgeglichen.
Wenn dieser Fehler auftritt, sollten Titel GetMatchmakingTicket aufrufen, um zwischen diesen beiden Fällen zu unterscheiden. Im ersten Fall befindet sich das Ticket bereits im gewünschten Zustand, und es müssen keine weiteren Maßnahmen ergriffen werden. Der zweite Fall weist darauf hin, dass der Abbruch eines Benutzers zu spät war und bereits abgeglichen wurde. Diese Racebedingung zwischen dem Abbruch eines Benutzers und einer gefundenen Übereinstimmung ist unvermeidbar und muss vom Titel behandelt werden.
Der Titel hat zwei Optionen, um dies zu lösen: Nehmen Sie trotzdem an der Übereinstimmung teil, ignorieren Sie die Abbruchanforderung des Benutzers, oder lassen Sie zu, dass die Übereinstimmung beginnt, zu wissen, dass ein Spieler nicht teilnehmen wird. Keine der beiden Optionen ist perfekt, aber es ist wichtig, diese Situation zu erwarten und bewusst einen Titelflow dafür zu erstellen. Es ist auch erwähnenswert, dass Spieler aus einer Reihe von Gründen nicht an einem Spiel teilnehmen dürfen, sodass ein Titel diesen Fall unabhängig von der hier erwähnten Racebedingung behandeln muss.