我使用解析创建了一个基于转弯的绘图游戏,您可以在其中与任何人玩游戏。一次只能有一个用户可以玩。有三个回合。它在玩家的朋友列表中工作正常 - >您要么开始新游戏,要么接收通知以继续游戏。
我试图实现多人游戏模式 - >为此,我在数据库中有一个单独的列表,包含所有可用的公共游戏。如果游戏是公开的,我会在该列表中创建一个带有指向游戏的指针的新对象。每次用户搜索可用游戏时,他都会查询该列表,如果找到记录,我会删除此特定列表中的公共游戏对象,使其对其他用户不可用,游戏继续进行..
我想知道以下内容 - > 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 :(得分:0)
假设试图销毁已经被破坏的对象会导致错误,这是正确的吗?
根据我的经验,不,这不正确。我总是直接使用Android和iOS API中可用的删除方法,而不是调用解析云中的方法,但对于Android和iOS API中的删除方法,在已删除的对象上调用delete不会引发错误。它就像删除成功一样。
我有一个想法是在公共游戏对象上添加一个beforeDelete函数,以检查它是否仍然可用,但我现在正试图保持我的请求数量很少..
这是您的最佳选择。通常,您正在处理“对象修改”,因此您可以检查类似“已修改时间”的时间戳,但由于您要删除对象,因此您只需检查它是否仍然存在。