다음을 통해 공유


CloudScript에서의 오류 처리

이 자습서는 CloudScript 처리기 내에서 오류를 인식하고 처리하는 방법에 대해 설명합니다.

식별

첫 번째 단계는 오류를 식별하는 것입니다. 캐치하지 못한 오류도 모두 기록되기 때문에 호출자(클라이언트) 응답에서 입수할 수 있지만, 그래도 try/catch 블록을 사용하여 조기에 오류를 캐치할 수 있습니다.

오류를 생성하고 포착하는 다음 CloudScript 조각을 고려하세요.

"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
    }
}

오류 코드가 캐치 블록 내에서 어떻게 추출되었는지 주목하세요. 전체 오류 목록은 Global API 메서드 오류 코드 설명서를 참조하세요.

참고 항목

오류 코드 자체만으로도 오류를 식별하는 데 충분합니다.

로깅

처리되지 않은 오류는 응답에 추가되기 때문에 클라이언트에서 문제를 처리할 수 있습니다.

동시에 CloudScript 오류 항목이 만들어져 전체 통계에 추가되어 CloudScript 대시보드에 나타납니다.

게임 관리자 - API 오류 그래프를 보여 주는 CloudScript 대시보드

예외를 JSON 문자열의 형식으로 강제 기록하려면 log 개체를 통해 오류 로그를 사용합니다.

"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        log.error(ex);
    }
}

마지막으로, 분석을 통해 나중에 처리하기 위해 타이틀/플레이어 이벤트를 작성할 수 있습니다.

"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        server.WriteTitleEvent({
            EventName : 'cs_error',
            Body : ex
        });
    }
}

복구

항상 오류에서 복구할 수 있는 것은 아닙니다. InvalidArguments 같은 문제는 플레이어에게 문제를 보고하는 것 외에는 다른 옵션이 없습니다.

재시도 전략을 적용할 수 있는 하위 오류 집합이 있습니다. 재시도 가능 오류 유형은 글로벌 API 메서드 오류 코드에 설명되어 있습니다.

재시도 전략을 적용할 때는 다음 요건을 충족‘해야 합니다’.

  • 재시도할 때마다 재시도 사이의 지연을 상당히 ‘늘려야’ 합니다. 그러면 호출 성공 가능성이 증가하고, 게임이 PlayFab 서버를 스패밍하는 것을 방지합니다(스패밍은 호출 거부 ‘증가’를 야기함).

  • 이 재시도 전략은 ‘선택적으로’ 적용해야 합니다, 즉 재시도할 가치가 있는 코드를 위해서만 사용해야 합니다.

CloudScript 시간 제한 오류

CloudScript API 호출의 실행 시간은 4초로 제한됩니다.

실행 시간이 4초를 초과하면 InternalServerError가 발생하고 PlayStream 이벤트에서 다음과 유사한 Logs 개체를 씁니다.

    "Logs":[
        {
        "Level":"Error",
        "Message":"PlayFab API request failure",
        "Data":{
            "request":{
                "PlayFabId":"9437A5ADDAE3012D"
            },
            "error":"Timeout",
            "api":"/Server/GetPlayerSegments"
        }
        }
    ]

이 오류가 발생하면 다음을 수행할 수 있습니다.