2016-05-09 20 views
0

私は、誰とでも遊ぶことができるパースを使ってターンベースのドローイングゲームを作成しました。一度に1人のユーザーしか再生できません。 3つのターンがあります。それはすべてのプレーヤーの友人リスト内で正常に動作している - >あなたは新しいゲームを開始するか、または1つを続行するための通知を受け取ります。PARSE - 同時リクエストの処理?

私はマルチプレイヤーモードを実装しようとしています。そのためには、利用可能なすべての公開ゲームを含むデータベースに別のリストがあります。ゲームをパブリックにすると、そのリストにゲームへのポインタで新しいオブジェクトが作成されます。ユーザーが利用可能なゲームを検索するたびに、そのレコードを見つけたときにレコードが見つかると、この特定のリストのパブリックゲームオブジェクトを削除して他のユーザーが利用できないようにして、ゲームを続けます。

私は次のことを疑問に思っています - >パーズはどのように並行要求を処理しますか? 同時に複数のユーザーが同じオブジェクトを削除しようとする可能性はありますか(下記のコードを参照)私はすでにそのような行動を避けるために、私のクエリでランダムなインデックスをスキップしていますが、それは些細なようだ..ここ

は、リクエストを処理するための私の雲のコードのサンプルです:

Parse.Cloud.define('findPublicGame', function(req, res) { 
    var query = new Parse.Query("public"); 
    query.count({ 
     success: function(number) { 
      if (number == 0) { 
       // no public games - reject 
       res.success(number); 
      } else { 
       // public game found - handle 
       query.limit(1) 
       var randomIndex = parseInt(Math.random() * number); 
       query.skip(randomIndex); 
       query.find({ 
        success: function(object) { 
         // delete public 
         object[0].destroy({ 
          success: function(_data) { 
           res.success(_data); 
          }, 
          error: function(error) { 
           res.error(); 
          } 
         }); 
        }, 
        error: function(error, object) { 
         res.error(error); 
        } 
       }); 
      } 
     }, 
     error: function(error) { 
      res.error(error); 
     } 
    }); 
}); 

はにそれが正しいです既に破壊されたオブジェクトを破壊しようとするとエラーが発生すると仮定します。

誰が啓発することができれば、私はそれがまだ使用可能ですかどうかを確認するために、公共のゲームオブジェクトにbeforeDelete機能を追加するという考えを持っていたが、私は..

を今の低リクエストの私の数を維持しようとしています私、名声!

答えて

0

すでに破棄されたオブジェクトを破棄しようとするとエラーが発生すると想定するのは間違いですか?

私の経験上、いいえ、これは正しくありません。私は、解析クラウド内のメソッドを呼び出すのではなく、Android APIとiOS APIで直接使用できるdeleteメソッドを使用しましたが、Android APIとiOS APIのdeleteメソッドでは、すでに削除されたオブジェクトに対してdeleteを呼び出してもエラーは発生しません。あたかも削除が成功したかのように進行します。

..私はそれがまだ利用できるかどうかを確認するために、公共のゲームオブジェクトにbeforeDelete機能を追加するという考えを持っていたが、私は今のところ低い要求の私の数を維持しようとしていますこれはあなたが持っている最良の選択肢です。通常、「オブジェクトの変更」を扱っているので、「変更された」タイムスタンプのようなものをチェックしますが、オブジェクトを削除するので、オブジェクトがまだ存在するかどうかを確認するだけです。

+0

私はクライアント側に破壊関数を置くことが賢明な動きだと思うが、クライアント/サーバ間の遅延は、おそらく同じオブジェクトの取得を避けるのに少し役立つことができる..私はまだ私のクラウドコード関数を使用してパブリックオブジェクトであり、beforeDeleteに "存在するかどうかをチェックする"を実装しただけで、うまくいきます。ご協力いただきありがとうございます! もう1つの注意点として、parse-serverはliveQueriesを実装したばかりなので、ユーザがクエリに登録するとオブジェクトが削除されたかどうかを確認するために使うことができます。 –

関連する問題