2012-03-25 17 views
2

私はグールのApp Engineを使用してバックエンド「ランダム対戦相手と対戦する」シンプルを構築しています。これまでは、データストアの「テーブル」に再生したい各ユーザーを追加しています。データストアに1人以上のプレイヤーがいるとすぐに、私はそれらをマッチさせることができます。私は最低解像度が細かくなるように見えることを見るまで Google App Engine - Cronまたはタスクキュー?

Schedule Tasks with Cron

は、この作品のために有望に見えました。多くの選手がサインアップしている場合、私はそれらを素早くマッチングさせ、1分(最悪の場合)を待つ必要はありません。

私は、マッチメイキングを行う「ランダムな相手との対戦」POSTをタスクキューに要求するサーブレットについて考えましたが、これはデータストアから読み込んで削除する際に多くの競合を招くと思います彼らがマッチした後に "ランダム"テーブルからのenteties?

基本的に私はマッチングを行う1人のワーカーが欲しいと私は時々このワーカーに合図したいと考えていますは対戦相手と試合するのが良い時期です。

ここでアクションの右側のコースであるもの上の任意の提案?

答えて

2

あなたは取引を通じて排他的アクセスを保証することができます。

  1. は、REST経由で再生するための要求を受信します。データベース内に要求があるかどうかを(トランザクション内で)チェックします。ある場合

  2. は、プレイを開始し、データベースからの要求を(transactionaly)を削除するには、両方のユーザーに通知します。存在しない場合

  3. 、それをデータベースに追加し、次の要求を待ちます。

更新:

Alternativellyあなたがpull queue経由で必要なものを達成することができます。上記と同じシナリオでは、データストアの代わりに、プルキューにタスクがあるかどうかをチェックし、タスクがない場合は新しいタスクが存在するかどうかを検索します。

+1

はい、トラフィックは膨大ですが、これはおそらく多くの競合につながります。実際のマッチングを行う複数の「ワーカー」が必要であることはわかりません。私は、Cronジョブを使用せずに単一のワーカーを作成できるかどうかはわかりません。 "0.1分"に設定しようとしていませんが、Cronには問題があります。 – TommyN

+0

主な問題 - GAEには「ワーカー」がありません(割り当てられたスレッドを実行中および実行中)。あなたが得ることができる最も近いのはTask Queueです。あなたのケースでは、プルキュー。更新された回答をご覧ください。 –

+0

あなたがここにもバックエンドを使用することができます - 保留中の各ゲームの要求は、独自のエンティティグループである限り、しかし、競合があるわけではありません。 –

関連する問題