PARSE - 处理并发请求?
PARSE - Handling concurrent requests?
我使用 parse 创建了一个回合制绘画游戏,您可以在其中与任何人一起玩。一次只有一个用户可以玩。一共有三个回合。在玩家的好友列表中一切正常 -> 你要么开始新游戏,要么收到继续游戏的通知。
我正在尝试实现多人游戏模式 -> 为此,我在数据库中有一个单独的列表,其中包含所有可用的 public 游戏。如果制作了游戏 public,我会在该列表中创建一个新对象,并带有指向该游戏的指针。每次用户搜索可用游戏时,他都会查询该列表,如果找到记录,我会删除此特定列表中的 public 游戏对象,使其对其他用户不可用,然后游戏继续进行。
我想知道以下 -> 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);
}
});
});
假设试图销毁一个已经销毁的对象会导致错误是否正确?
我想在 public 游戏对象上添加一个 beforeDelete 函数,以检查它是否仍然可用,但我现在正试图将请求数量保持在较低水平..
谁能赐教,不胜感激!
Is it correct to assume that trying to destroy an already-destroyed object will result in an error?
根据我的经验,不,这是不正确的。我总是使用直接在 Android 和 iOS API 中可用的删除方法,而不是调用解析云中的方法,但对于 Android 和 iOS 中的删除方法] API,在已删除的对象上调用 delete 不会抛出错误。它就像删除成功一样继续进行。
I had an idea of adding a beforeDelete function on the public game object, to check if it's still available, but I'm trying to keep my number of requests low for now..
这是您最好的选择。通常,您正在处理 "object modification",因此您会检查类似 "modified at" 时间戳的内容,但由于您正在删除对象,您只需要检查它是否仍然存在。
我使用 parse 创建了一个回合制绘画游戏,您可以在其中与任何人一起玩。一次只有一个用户可以玩。一共有三个回合。在玩家的好友列表中一切正常 -> 你要么开始新游戏,要么收到继续游戏的通知。
我正在尝试实现多人游戏模式 -> 为此,我在数据库中有一个单独的列表,其中包含所有可用的 public 游戏。如果制作了游戏 public,我会在该列表中创建一个新对象,并带有指向该游戏的指针。每次用户搜索可用游戏时,他都会查询该列表,如果找到记录,我会删除此特定列表中的 public 游戏对象,使其对其他用户不可用,然后游戏继续进行。
我想知道以下 -> 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);
}
});
});
假设试图销毁一个已经销毁的对象会导致错误是否正确?
我想在 public 游戏对象上添加一个 beforeDelete 函数,以检查它是否仍然可用,但我现在正试图将请求数量保持在较低水平..
谁能赐教,不胜感激!
Is it correct to assume that trying to destroy an already-destroyed object will result in an error?
根据我的经验,不,这是不正确的。我总是使用直接在 Android 和 iOS API 中可用的删除方法,而不是调用解析云中的方法,但对于 Android 和 iOS 中的删除方法] API,在已删除的对象上调用 delete 不会抛出错误。它就像删除成功一样继续进行。
I had an idea of adding a beforeDelete function on the public game object, to check if it's still available, but I'm trying to keep my number of requests low for now..
这是您最好的选择。通常,您正在处理 "object modification",因此您会检查类似 "modified at" 时间戳的内容,但由于您正在删除对象,您只需要检查它是否仍然存在。