GoogleのFirebase Realtime Databaseを最近勉強し始め、
習作にとりかかっている中でご質問させていただきたいことがあります。
内容としては、Cloud Functionsでデータベースの変更を関知してから
●●秒後に特定の処理を行う、という時間差の処理を実現するための方法を探しております。
下記、お目通しいただけると大変たすかります。
●作っているもの
リアルタイムで一つの空間を共有するシンプルな「オンラインドミノ倒し」
- 複数人が入室できる
- プレイヤーはドミノを「ひとつ積む」か「倒す」かだけを選択できる
- 誰かが「倒す」を選択すると全プレーヤーの画面が「ドミノが倒れている最中」になる
- 「ドミノが倒れている最中」は、どのプレーヤーも上記の選択はできない
- 「ドミノが倒れている最中」に入室してきたプレーヤーについても同様
●悩み
あるプレーヤーが「倒す」を選択して「ドミノが倒れている最中」というステータスにした後、
「ドミノが倒れ終わった」というステータスに戻す処理はサーバー側で行う必要があると考えています。
なぜなら「倒す」を選択したユーザーが直後に退室したり、全プレーヤーが退室したとしても
その仮想空間では「ドミノが倒れている最中」のステータスを維持しなければいけないからです。
具体的には、「倒す」を選択したユーザーは同時にサーバー側に「ドミノの本数」を送り、サーバー側では受け取った本数×1 秒後に「ドミノが倒れている最中」のステータスを解除する、という処理を行いたいです。
●思いついている手段と問題点
0. Cloud FunctionsでsetTimeout的な関数を記述する ⇒実行自体は可能なようなのですが、秒数が長いとタイムアウトになり、また利用料金にも跳ね返るリスク
0. 外部のCronサービスから呼び出す ⇒公式で紹介されていた方法ですが、今回は秒単位で管理したいのと、定期スケジュールでの実行とは考え方が違うので、相性が悪い?と踏んでいます。
実現したいこと(作っているもの)はシンプルなはずのですが、
自分の頭では良い方法が思い浮かばず、良いアイデアを教えていただけると嬉しいです。
何卒よろしくお願いいたします。
あなたの回答
tips
プレビュー