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
}
}
catch ブロック内で、どのようにエラー コードが抽出されたかを確認してください。 エラーの完全な一覧については、「グローバル API メソッドのエラー コードに関するドキュメント」を参照してください。
注意
エラー コードのみで、十分にエラーを特定できます。
ログ記録
すべての未処理のエラーは応答に追加され、クライアントは問題を処理できます。
同時に、CloudScript エラー エントリが作成され、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 timeout error
CloudScript API 呼び出しの実行時間は 4 秒に制限されます。
実行時間が 4 秒を超えると、InternalServerError
が発生し、PlayStream イベントは次のような Logs オブジェクトを書き込みます。
"Logs":[
{
"Level":"Error",
"Message":"PlayFab API request failure",
"Data":{
"request":{
"PlayFabId":"9437A5ADDAE3012D"
},
"error":"Timeout",
"api":"/Server/GetPlayerSegments"
}
}
]
このエラーが発生した場合は、次のことができます:
- CloudScript を、4 秒以内に実行される小さなコード セグメントに分割します。
- Azure Functions を使用して CloudScript に切り替えます。タイムアウト制限が長くなる場合があります。 制限は、「クイックスタート ガイド」で確認できます。