Behandeln von Fehlern in CloudScript
In diesem Tutorial wird beschrieben, wie Sie Fehler in Ihren CloudScript-Handlern erkennen und behandeln.
Identifizieren
Der erste Schritt besteht darin, den Fehler zu identifizieren. Während jeder nicht abgefangene Fehler protokolliert wird und in der Antwort an den Aufrufer (Client) verfügbar ist, können Sie den Fehler mithilfe eines try/catch
-Blocks frühzeitig abfangen.
Betrachten Sie den folgenden CloudScript-Codeausschnitt, der den Fehler erzeugt und abfängt.
"use strict";
handlers.GenerateError = () => {
try {
server.GetPlayerStatistics({
PlayFabId : "non-existing-player-id"
});
} catch (ex) {
let error = ex.apiErrorInfo.apiError.error; // In this case - "InvalidParams"
let errorCode = ex.apiErrorInfo.apiError.errorCode; // In this case : 1000
}
}
Beachten Sie, wie die Fehlercodes im Catch-Block extrahiert wurden? Eine vollständige Liste der Fehler finden Sie in der Dokumentation zu Fehlercodes für globale API-Methoden .
Notiz
Der Fehlercode allein reicht aus, um den Fehler zu identifizieren.
Protokollierung
Jeder nicht behandelte Fehler wird der Antwort hinzugefügt, sodass der Client das Problem verarbeiten kann.
Gleichzeitig wird ein CloudScript-Fehlereintrag erstellt und der Gesamtstatistik hinzugefügt, die in Ihrem CloudScript-Dashboard verfügbar ist.
Um die Ausnahme in Form einer JSON-Zeichenfolge zu erzwingen, verwenden Sie die Fehlerprotokollierung über das log
-Objekt.
"use strict";
handlers.GenerateError = () => {
try {
server.GetPlayerStatistics({
PlayFabId : "non-existing-player-id"
});
} catch (ex) {
log.error(ex);
}
}
Schließlich können Sie Titel-/Playerereignisse zur späteren Verarbeitung durch Analysen schreiben.
"use strict";
handlers.GenerateError = () => {
try {
server.GetPlayerStatistics({
PlayFabId : "non-existing-player-id"
});
} catch (ex) {
server.WriteTitleEvent({
EventName : 'cs_error',
Body : ex
});
}
}
„Wiederherstellung
Eine Wiederherstellung nach Fehlern ist nicht immer möglich. Probleme wie InvalidArguments
lassen Ihnen keine andere Möglichkeit, als das Problem an den Spieler zu melden.
Es gibt eine Teilmenge von Fehlern, bei denen eine Wiederholungsstrategie angewendet werden kann. Wiederholungsfähige Fehlertypen werden unter Fehlercodes der globalen API-Methode beschrieben.
Wir bitten Sie, sicherzustellen, dass Sie die folgenden Anforderungen erfüllen, wenn Sie eine Wiederholungsstrategie anwenden:
Mit jedem Wiederholungsversuch sollte die Verzögerung zwischen Wiederholungen exponentiell ansteigen . Dies erhöht Ihre Chancen auf einen erfolgreichen Anruf und verhindert, dass Ihr Spiel den PlayFab-Server spammiert (was zu mehr abgelehnten Anrufen führt).
Sie sollten diese Wiederholungsstrategie selektiv anwenden und sie nur für die Codes verwenden, die einen Wiederholungsversuch wert sind.
CloudScript-Timeoutfehler
Die Ausführungszeit von CloudScript-API-Aufrufen ist auf 4 Sekunden beschränkt.
Wenn die Ausführungszeit 4 Sekunden überschreitet, wird eine InternalServerError
ausgelöst, und das PlayStream-Ereignis schreibt ein Logs-Objekt ähnlich dem folgenden:
"Logs":[
{
"Level":"Error",
"Message":"PlayFab API request failure",
"Data":{
"request":{
"PlayFabId":"9437A5ADDAE3012D"
},
"error":"Timeout",
"api":"/Server/GetPlayerSegments"
}
}
]
Wenn dieser Fehler auftritt, haben Sie folgende Möglichkeiten:
- Unterteilen Sie CloudScript in kleinere Codesegmente, die in weniger als 4 Sekunden ausgeführt werden.
- Wechseln Sie mit Azure Functions zu CloudScript, das in einigen Fällen längere Timeoutlimits aufweist. Die Grenzwerte finden Sie im Schnellstarthandbuch.