Вопрос скорости запроса Ajax - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу предотвратить слишком быструю отправку пользователем запросов от 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
----------------------------

Я полностью запутался в этой ситуации.Будет ли значение сеанса не сохранено до завершения запроса?Как мне решить эту проблему?

1 Ответ

0 голосов
/ 21 ноября 2018

похоже, что переменные сеанса будут сохранены позже при обработке жизненного цикла контроллера?Обходное решение может быть использовать Redis для этого случая?

вы должны найти способ убедиться, что переменная, которую вы используете, является постоянной при большем количестве параллельных запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...