私は、誰とでも遊ぶことができるパースを使ってターンベースのドローイングゲームを作成しました。一度に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機能を追加するという考えを持っていたが、私は..
を今の低リクエストの私の数を維持しようとしています私、名声!
私はクライアント側に破壊関数を置くことが賢明な動きだと思うが、クライアント/サーバ間の遅延は、おそらく同じオブジェクトの取得を避けるのに少し役立つことができる..私はまだ私のクラウドコード関数を使用してパブリックオブジェクトであり、beforeDeleteに "存在するかどうかをチェックする"を実装しただけで、うまくいきます。ご協力いただきありがとうございます! もう1つの注意点として、parse-serverはliveQueriesを実装したばかりなので、ユーザがクエリに登録するとオブジェクトが削除されたかどうかを確認するために使うことができます。 –