GS2 Blog

Game Server Services(https://gs2.io/) の最新情報をお届けします

【新機能】GS2-Lock/GS2-JobQueue の提供を開始しました。

みなさんこんにちは。GS2の丹羽です。

先日こちらのエントリで告知していた新サービスの提供を開始しました。

gs2.hatenablog.com

また、今回のリリースにあわせてドメインの変更も行われています。

gs2.hatenablog.com

さて、サービスの内容に関しては告知時におおむねお伝えしていますので、ここでは Unity SDK からの使い方と料金についてご説明しようと思います。

GS2-Lock

GS2-Lock の使い方は非常に簡単です。

yield return Gs2.Lock.Lock(
    r =>
    {
        if (r.Error != null)
        {
            // 例外が発生
        }
    },
    Session, // ゲームセッション
    LockPoolName,       // ロックプール名
    "resource-0001",    // ロックを取得するリソース名
    "transaction-0001", // トランザクションID
    5 // ロックの有効期限(秒)
    );

// この間に resource-0001 に関する処理を行う。
// たとえば、残高を確認し、残高が必要量以上あれば消費するというような具合
// ロックを取った中で処理を実行することで、残高を確認してから消費するまでの間に割り込まれる心配が無くなる

yield return Gs2.Lock.Unlock(
    r =>
    {
        if (r.Error != null)
        {
            // 例外が発生
        }
    },
    Session, // ゲームセッション
    LockPoolName, // ロックプール名
    "resource-0001", // ロックを取得するリソース名
    "transaction-0001", // トランザクションID
);

GS2-Lock の利用料金はサービスクラス+APIリクエスト回数に対する課金となっていますが、
最少クラスである lock1.nano(1秒間に1回 ロックまたはアンロック可能) は無料でご利用いただけます。
その次のクラスである lock1.micro(1秒間に5回 ロックまたはアンロック可能) は1時間あたり10円でご利用いただけます。
そのほかの利用料金として、APIリクエスト1,000回あたり3円の利用料金が必要です。
APIリクエストには毎月10,000回までの無料枠があります。

GS2-JobQueue

GS2-JobQueue はジョブの登録は Unity SDK からは行えません。
ここでは GS2-Script からジョブを登録する例を示します。

job_queue_client = client('job_queue')        –- GS2-JobQueue のクライアントを初期化
result = job_queue_client.push({
    queueName="queue-0001", -- ジョブキュー名 
    userId="user-0001", -- ジョブを登録するユーザID
    jobs={
        {
            scriptName="script-0001", -- ジョブで実行するGS2-Script名
            args="{\"param1\": \"test\", \"param2\": 2}", -- GS2-Script に渡す引数
            maxRetry=5 -- 最大リトライ回数
        },
        {
            scriptName="script-0002", -- ジョブで実行するGS2-Script名
            args="{\"param\": \"aaa\"}", -- GS2-Script に渡す引数
            maxRetry=3 -- 最大リトライ回数
        }
    }
})
result = {permit=not result.isError} -- ジョブの登録に失敗した場合失敗とする

ジョブの実行は Unity SDK で行えて

yield return Gs2.JobQueue.Run(
    r =>
    {
        if (r.Error != null)
        {
            // 例外が発生
        }
        Debug.Log("statusCode: " + r.Result.StatusCode); // ステータスコード(200が成功 - httpステータスコードに準拠)
        Debug.Log("result: " + r.Result.Result); // ジョブが実行したスクリプトの戻り値
        Debug.Log("endOfJob: " + r.Result.EndOfJob);     // キューの終端までジョブを実行したか
    },
    Session, // ゲームセッション
    QueueName // ジョブキュー名
);

このようになります。ジョブの実行リクエストを定期的に実行することでジョブキューを通した非同期処理を実現出来ます。

ジョブキューにジョブが追加されたときにサーバからプッシュ通知でクライアントに知らせたい場合は
GS2-InGamePushNotification と連携することで、ポーリングしなくてもジョブキューを処理することが出来ます。

Gs2.JobQueue.SetInGamePushNotificationSession(session);

GS2-JobQueue のクライアントに GS2-InGamePushNotification のセッション情報を渡して

Gs2.JobQueue.OnEntryJob += (notification) =>
{
    Debug.Log("queueName: " + notification.QueueName);
};

イベントハンドラを登録するだけです。イベントハンドラにはジョブが登録されたジョブキュー名が渡ってきますので、
それを使ってジョブキューの終端までジョブを実行すれば実装は完了です。

GS2-JobQueue の利用料金は完全リクエスト課金で

ジョブの登録 3円/1,000件
ジョブの実行 5円/1,000回
ジョブ/デッドジョブ/ジョブ実行結果取得 5円/~10件/1,000回
ジョブ/デッドジョブ取得 1円/1,000回

となっており、毎月

ジョブの登録 10,000件
ジョブの実行 10,000回
ジョブ/デッドジョブ/ジョブ実行結果取得 10,000ユニット(取得件数10件あたり 1ユニット)
ジョブ/デッドジョブ取得 10,000回

の無料枠が付属します。

そのほかの利用料金として、APIリクエスト1,000回あたり3円の利用料金が必要です。
APIリクエストには毎月10,000回までの無料枠があります。

それでは、また。

(C) Game Server Services, Inc.