Freigeben über


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.

Game Manager – CloudScript-Dashboard mit einem Diagramm von API-Fehlern

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: