エラー・例外
Game Server Services を利用する上で発生する一般的なエラー
GS2 が応答するエラーは一定の法則を持って応答されます。 法則を理解することで、エラーの解消が迅速に行えるようになります。
エラーメッセージの例
[{"component":"progress","message":"quest.progress.progress.error.notFound"}]
セクション | 説明 |
---|---|
component | エラーが発生した対象を示し、メンバー名、メソッド名が入ります。 |
message | エラー箇所の詳細、エラーを表すキーワードが入ります。 サービス名 .コンポーネント .error.エラー内容 |
主要なエラー内容
主要なエラー内容 | 説明 |
---|---|
failed | 処理に失敗しました。 |
invalid | 不正なパラメータです。 |
require | 必要な引数がありません。 |
tooLong | 引数の文字数が長すぎます。 |
tooMany | 配列の要素数が多すぎます。 |
exists | 既に存在しています。 |
duplicate | 重複、既に存在しています。 |
notFound | 見つかりませんでした。 |
notMatch | 合致しませんでした。 |
例外の種類
SDK によってエラーはある程度分類され、送出される例外の型が変化します。
例外 | エラー内容 | ステータスコード | リトライを推奨 |
---|---|---|---|
BadRequestException | リクエストの内容が不正です。 | 400 | |
UnauthorizedException | GS2との接続に必要な権限の認証ができませんでした。APIアクセスに使用しているアクセストークンの期限が切れた場合にも発生します。 | 401 | |
QuotaLimitExceededException | クォータ(割り当て)の制限を超えました。 | 402 | ✔︎ |
NotFoundException | リクエストの対象が見つかりませんでした。 | 404 | |
ConflictException | 処理が衝突しました。 | 409 | ✔︎ |
InternalServerErrorException | サーバーでエラーが発生しました。 | 500 | ✔︎ |
BadGatewayException | サーバーが無効なレスポンスを受け取りました。他のサーバーやGS2のマイクロサービスとの連携に失敗した時に発生します。 | 502 | ✔︎ |
ServiceUnavailableException | サービスでエラーが発生しました。 | 503 | ✔︎ |
RequestTimeoutException | リクエストがタイムアウトしました。 | 504 | ✔︎ |
UnknownException | 不明な例外が発生しました。 |
「リトライを推奨」にマークされている例外は、リクエストパラメータは正常だが、サーバーの状態によって発生する可能性があるエラーです。 このようなエラーを検知した場合、リトライすることを推奨します。
その際に成功するまでリトライするのではなく、一定回数や一定時間の経過でタイムアウトする実装を入れることを強く推奨します。 リトライをする際に、リクエスト間にスリープを入れることを推奨しており、リトライ回数に応じてスリープの長さを伸ばしていくことを推奨します。
ゲーム内でハンドリングを必要とするエラーについては、マイクロサービスごとに列挙した例外を継承したエラー固有の例外型を定義しているものがあります。 その場合、エラー固有の例外でエラーハンドリングをすることでより簡単にエラーハンドリングを実装できます。 固有のエラーを表現する例外が存在する場合、APIリファレンスのメソッドの説明に記載がありますので、そちらをご参照ください。
カオスモード
GS2 C# SDK および GS2 SDK for Unity にはカオスモードが搭載されています。 カオスモードを有効化すると、指定した割合でリトライが必要な例外をランダムに発します。
開発をカオスモードを有効にした状態で進めることで、ゲーム内のエラーハンドリングをより強固なものにすることができます。 カオスモードの有効化の方法は 初期化処理 を参照してください。