[英]PARSE - Handling concurrent requests?
我使用解析創建了一個基於回合的繪圖游戲,您可以在其中與任何人玩游戲。 一次只能有一個用戶可以玩。 有三回合。 在玩家的朋友列表中,一切正常->您開始新游戲,或收到通知您繼續游戲的信息。
我正在嘗試實現多人游戲模式->為此,我在數據庫中有單獨的列表,其中包含所有可用的公共游戲。 如果將某個游戲公開,那么我會在該列表中創建一個新對象,並帶有指向游戲的指針。 每次用戶搜索可用的游戲時,他都會查詢該列表,如果找到了記錄,我會刪除此特定列表中的公共游戲對象,以使其對其他用戶不可用,然后游戲繼續進行。
我想知道以下->解析如何處理並發請求? 是否可能有多個用戶同時搜索,試圖刪除同一對象(請參見下面的代碼)? 我已經在查詢中跳過了隨機索引來避免這種行為,但這似乎很瑣碎。
這是我的雲代碼示例,用於處理請求:
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函數,以檢查它是否仍然可用,但是我現在試圖將請求數量保持在較低水平。
如果有人能啟發我,我就很榮幸!
假設破壞一個已經被破壞的物體會導致錯誤,這是否正確?
以我的經驗,不,這是不正確的。 我一直使用直接在Android和iOS API中可用的delete方法,而不是在解析雲中調用方法,但是對於Android和iOS API中的delete方法,在已經刪除的對象上調用delete不會引發錯誤。 它就像刪除成功一樣繼續進行。
我有一個想法,在公共游戲對象上添加一個beforeDelete函數,以檢查它是否仍然可用,但是我現在試圖將請求數量保持在較低水平。
這是您最好的選擇。 通常,您正在處理“對象修改”,因此您將檢查類似“修改時”的時間戳,但是由於要刪除對象,因此只需要檢查對象是否仍然存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.