Ruby on rails Rails中的Rapid Fire AJAX请求导致Apache上的数据覆盖 问题
在使用FCGI将rails 3.2.8应用程序从WEBrick移动到Apache之后,我遇到了一个问题 该应用程序包括一个用javascript编写的游戏,它发送大量AJAX请求以更新服务器上的游戏统计数据 使用WEBrick可以很好地工作,但是现在我已经切换到Apache,如果我对同一条记录进行几次rapid fire更新,那么它们之间似乎写得太多了。例如,如果我有15个ajax调用,它们在大致相同的时间被发送,以更新每个请求的“点数”值5分,那么总分将不会达到75分(我想要的分数),而是在5到45分之间变化较小的数值 我相信这是因为apache能够同时处理多个请求 我认为正在发生的事情Ruby on rails Rails中的Rapid Fire AJAX请求导致Apache上的数据覆盖 问题,ruby-on-rails,ajax,apache,fastcgi,Ruby On Rails,Ajax,Apache,Fastcgi,在使用FCGI将rails 3.2.8应用程序从WEBrick移动到Apache之后,我遇到了一个问题 该应用程序包括一个用javascript编写的游戏,它发送大量AJAX请求以更新服务器上的游戏统计数据 使用WEBrick可以很好地工作,但是现在我已经切换到Apache,如果我对同一条记录进行几次rapid fire更新,那么它们之间似乎写得太多了。例如,如果我有15个ajax调用,它们在大致相同的时间被发送,以更新每个请求的“点数”值5分,那么总分将不会达到75分(我想要的分数),而是在5
- 统计控制器接收到添加点的请求李>
- 控制器从数据库中打开统计记录的副本
- 该模型在当前记录的点数上增加5。
- 保存记录之前控制器收到另一个添加积分的请求李>
- 它将打开仍保存旧积分总数的记录李>
- 这比以前的总数增加了5分李>
- 第一个请求的记录保存。
- 第二个请求的记录保存李>
谢谢。我使用了一个与一致的 代码现在如下所示:
# GET /statistics/request.json
def request
# Begin a transaction
Statistic.transaction do
stat = Statistic.find(params[:id], lock: true) # Lock the record until we're done with the transaction.
stat.total_points += 5
stat.save!
respond_to do |format|
format.json { render json: stat }
end
end
end
您还必须确保使用支持锁定的数据库引擎,在我的例子中是运行InnoDB的MySQL
特别感谢这篇文章向我展示了光明: