GS2-JobQueue

GS2-JobQueue は非同期処理で処理を実行するための仕組みです。

GS2-JobQueue はユーザ毎にジョブキューを用意し、ジョブキューにジョブを登録して使用します。

ジョブキューは FIFO(先入れ先出し) を保証していますが、何らかのジョブを実行している途中に別のジョブを実行することは出来ません。

また、ジョブの登録は1秒間に1回という制約があり、1回のジョブ登録リクエストで最大10個までジョブを登録出来ます。

ジョブの実行は自動的に行われることは無く、明示的にジョブキューにジョブの実行リクエストを出す必要があります。

ジョブキューにジョブがある場合はジョブの実行結果とジョブキューの終端まで処理を終えたかを取得出来ます。

ジョブキューに定期的に実行リクエストを出すことで、非同期処理を実行出来ることになりますが、

ジョブがあるかわからないのに定期的にジョブの実行リクエストを出すのは非効率だと感じる開発者は GS2-InGamePushNotification との連携を使用出来ます。

GS2-InGamePushNotification と連携することで、ジョブキューにジョブが登録されたときにプッシュ通知を受けることが出来ます。

プッシュ通知を受けたらジョブキューの終端までジョブの実行リクエストをだし、終端についたら通知が来るまでは処理をしない。という実装をすることで、無駄なジョブ実行リクエストを無くすことが出来ます。

ゲームの中には特定の処理を契機として同期的に処理しなければならない処理と、非同期でいい処理があります。

たとえば、クエストをクリアした報酬としてユニットが手に入る場合は、同期的に処理しなければ

クエストをクリアした直後にユニット一覧を見たときに取得したユニットが一覧に無ければプレイヤーは混乱します。

しかし、入手したユニットを初めて入手した場合はユニット図鑑に登録する。という処理の場合

プレイヤーがすぐに図鑑を確認することはまれでしょうから、非同期で処理してもいい事になります。

このような処理を実現するために「ユニットを入手した」というイベントをトリガーとして GS2-Script を実行し

GS2-Script では入手したユニットが図鑑に登録されているかを確認し、図鑑に登録されていなければ図鑑に登録する。というスクリプトを設定すればいいことになります。

さらに、このイベントを GS2-JobQueue を通して実行することで、何らかの理由で図鑑の登録処理に失敗した場合にも

ジョブに指定した回数リトライさせることが出来ます。