Ajax请求速度问题

时间:2018-11-21 07:01:24

标签: ruby-on-rails ruby-on-rails-5

我想防止用户从ajax发送请求的速度过快。我在控制器中写了下面的验证。

def before_action
    if session[:expires_at].nil?
       logger.info "Operation is legal"
       session[:expires_at] = Time.current + 3.seconds
    elsif Time.current > session[:expires_at].to_time
       logger.info "Operation is legal"
       session[:expires_at] = Time.current + 3.seconds
    else
       logger.info "Error: Operation too fast"
       render json: { msg: "Operation too fast",res: "Err"}
       return
    end
    sleep 2 <-- The issue happends here
end

睡眠2秒表示我的程序执行时间。如果我取消睡眠2秒钟,一切都会正常。当我真正快速发送请求时,结果如下所示。

-----------Logs-------------
Operation is legal
Error: Operation too fast
Error: Operation too fast
Error: Operation too fast
Error: Operation too fast
Error: Operation too fast
Operation is legal
Error: Operation too fast
Error: Operation too fast
Error: Operation too fast
----------------------------

但是,如果在第一个请求执行之前发送了第二个或更多请求。结果将是意外的。如果我在验证代码中添加sleep 2。

-----------Logs-------------
Operation is legal
Operation is legal
Operation is legal
Error: Operation too fast
Error: Operation too fast
Error: Operation too fast
Error: Operation too fast
Operation is legal
Operation is legal
Error: Operation too fast
Error: Operation too fast
----------------------------

我对这种情况完全感到困惑。在请求完成之前会不会保存会话值?我应该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

看起来会话变量将在以后处理控制器生命周期时存储?解决方法是在这种情况下使用redis?

您应该找到一种方法来确保所使用的变量在更多并行请求中具有持久性。