node.jsにリミッターを設定したい

  • 4
    Like
  • 1
    Comment
More than 1 year has passed since last update.

使いどころ

人間ではない相手が無茶なリクエストをしてくることがあるので
そういったリクエスト数に一定の制限を設けたいときに使うかなぁ

例ではCPU処理をあげてるけど実際にはMYSQLとかMYSQLとかMYSQLだろうなぁ

var createLimitter = module.exports = function(max, reset_sec){
    var reset_time = process.uptime() + reset_sec;
    var count = 0;
    return function(){
        if(process.uptime() >= reset_time){
            reset_time = process.uptime() + reset_sec;
            count = 0;
        }
        if(count >= max){
            return false;
        }
        count++;
        return true;
    };
};
var createLimitter = require('./limitter');
var check = createLimitter(20, 1); // 秒間20回まで

var heavy_work = function(){
    if(!check()){
        return false;
    }
    cpu_heavy_calc();
    return true;
}