Skip to content

Limiter does not work #35

@bitliner

Description

@bitliner

My code is as following:

constructor:()=>{
  this.RateLimiterOnSeconds = new RateLimiter(4, 1*1000); // 5 requests per second
  this.RateLimiterOnHours = new RateLimiter(2000, 1*1000*60*60); // 2000 request per hour
}
sendReq1: ()=>{
  schedule(..)
}
sendReq2: ()=>{
  schedule(...)
}
schedule: (fn)=>{
  this.RateLimiterOnSeconds.removeTokens(1,(err, remainingRequests)=>{
    this.RateLimiterOnHours.removeTokens(1, () => {
      console.log('request executed in second...',new Date().getTime()/1000, remainingRequests);
      fn();
    });
  });
}

The limit is exceeded.

Indeed, the console.log in the schedule() method prints:

request executed in second... 1487770295.951 4
request executed in second... 1487770296.043 4
request executed in second... 1487770296.219 4
request executed in second... 1487770296.258 4
request executed in second... 1487770296.427 4
request executed in second... 1487770296.56 4
request executed in second... 1487770296.628 4
request executed in second... 1487770296.803 4
request executed in second... 1487770296.831 4
request executed in second... 1487770296.921 4
request executed in second... 1487770297.126 4
request executed in second... 1487770297.214 4
request executed in second... 1487770297.311 4
request executed in second... 1487770297.421 4
request executed in second... 1487770297.605 4
request executed in second... 1487770297.686 4
request executed in second... 1487770297.803 4

and as you can see, in the second 1487770297 there are 7 requests (instead of 5), and number of tokens to remove is constant.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions