Я хочу предотвратить слишком быструю отправку пользователем запросов от 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
----------------------------
Но если второй или более запросов были отправлены до того, как первый из них завершится.Результат будет неожиданным.Если я добавлю сон 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
----------------------------
Я полностью запутался в этой ситуации.Будет ли значение сеанса не сохранено до завершения запроса?Как мне решить эту проблему?