使用定义的阈值限制服务器调用的数量

时间:2015-12-02 19:23:10

标签: javascript node.js request

我正在使用request-sync从特定网站API获取数据,如下所示:

let req = request('GET', LINK, {
  'headers': {
    'Accept'                                          : ''
    'X-DevTools-Emulate-Network-Conditions-Client-Id' : '',
    'X-FirePHP-Version'                               : '',
    'Upgrade-Insecure-Requests'                       : '',
    'User-Agent'                                      : '',
    'Referer'                                         : '',
    'Accept-Encoding'                                 : '',
    'Accept-Language'                                 : '',
    'Cookie'                                          : ''
  }
});

我担心所有者阻止我的API或起诉我,如果他们释放了我正在做的请求数量。

所以,我想每分钟阻止50个请求。那有可能吗?怎么会这样?没有一个包可以帮我解决这个问题吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用计时器window.setInterval来实现相同的目标。阅读here

请参阅下面我为您创建的相同示例。在这里,我每30秒最多进行15次虚拟服务器调用,一旦达到15的threashold,服务器调用将停止。然后,一旦30秒过去,服务器呼叫将恢复。

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript">
            var count = 0;
            function makeServerCall(){
                console.log('making server call ... ' + count);
                count++;
            }

            function checkAndMakeServerCall(){
                if(count <= 15){  //Set how many calls you want to make within time set using setInterval(function(){ count = 0; }, 30000);
                    makeServerCall();
                } else{
                    console.log('not making server call ...');
                }
            }

            setInterval(function(){ checkAndMakeServerCall() }, 1000);
            setInterval(function(){ count = 0; }, 30000); //Define time... 30000 means 30 seconds ...

        </script>
    </head>
    <body>

    </body>        
</html>

答案 1 :(得分:0)

您可以使用node-rate-limiter来做到这一点。

另一种可能性是使用tor作为您的应用程序的代理,因此您不必担心ip速率限制。

易于使用的分布是Vidalia