处理Meteor中的并发请求

时间:2014-10-17 10:50:18

标签: meteor

我正在处理用户可以在指定的时间限制内更新文档的问题,如果他没有,服务器将会。

更新涉及递增值并将对象添加到文档数组。我需要确保只有一个用户/服务器更新文档。不是两个。

为了确保这种情况发生,运行一些检查以查看文档是否已经更新,但有时用户和服务器在完全相同的时间运行并且两者都通过检查,然后文档更新两次。

我一直在尝试许多不同的方法来解决这个问题,但我无法做到。我尝试实现类似于此的锁:http://en.wikipedia.org/wiki/Peterson%27s_algorithm以确保只发生一次更新而第二次更新将失败,但我没有成功。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

  

为了确保这种情况发生,运行一些检查以查看文档是否已经更新,但有时用户和服务器在完全相同的时间运行并且两者都通过检查,然后文档更新两次。

您可以通过使用MongoDB更新查询来实现此目的,该查询同时检查值是否已更新并更新它。像这样:

var post = Posts.findOne("ID");
// ... do some stuff with the post ...
Posts.update({counter: post.counter}, {$push: {items: newItem}, $inc: {counter: 1}});

正如您所看到的,在一个查询中我们都检查计数器并递增它 - 所以如果其中两个查询一个接一个地运行,那么只有一个会实际更新文档(因为计数器不再匹配)