limits.js helps you to handle
Most Web services have certain limitations regarding how many requests your client application can do in specific timeranges. Dealing with these limitations can be tough, especially if the limitations are more complex like for example: "You can do one request in a second but only a maximum of 20 requests in a minute and a maximum of 100 requests in an hour". This is where limits.js comes to help. limits.js makes sure you don't exceed the given limitations. limits.js works with Node.JS and in the Browser.
Samplevar limits = require('limits.js'); var queue = limits({ secondly: 1, // allow 1 call per second minutely: 2 // allow 2 calls per minute }); queue.push(function() { // this function will run instantly }); queue.push(function() { // this function will run after // a 1 second delay }); queue.push(function() { // this function will run // after a 60 second delay // since we already exceeded // the two calls per minute restriction }); queue.push(function() { // this function will not get executed // because we have defined an conditional // function which defines that this function // should only get called if the delay is // under 10 seconds. }, function(delay) { return delay < 10000; }); Installation Node.JS
npm install limits.js
Browser
bower install limits.js
Usage
var service = limits({ // The Number of calls permitted... secondly: Number, // ...in one second minutely: Number, // ...in one minute quarterly: Number, // ...in an quarter of an hour hourly: Number, // ...in an hour daily: Number, // ...in one day weekly: Number, // ...in one week history: Array, // Array of timestamps ( Date.now() ) // from previous calls onCall: Function, // Callback Function which gets fired // everytime a call gets executed. Passed // in as first argument you get the delay // in milliseconds with which the function // was called. // Can be used to persist the call history. onClear: Function, // Callback Function which gets fired // everytime a part of the backlog can be cleared. // First parameter is a Timestamp which indicates // from where on to the past it's save to delete // the history. }); // You can also specify the number of calls permitted // in an certain timerange like this: service.secondly(Numeric); service.minutely(Numeric); service.quarterly(Numeric); service.hourly(Numeric); service.daily(Numeric); service.weekly(Numeric); // The predefined ranges don't fit to your requirements? // No problem, try this: service.within(timerange, maxcalls); // With the 'push' method you are able to push a function // into the execution stack. // If the call doesn't get aborted by the second conditional function // you will get an object in return containing an 'delay' property, which indicates // with which delay the function will get called and an 'timer' property which // holds the return of the setTimeout function. var myCall = service.push(function() { // Here we do our API call. // The execution of this function will get // delayed if we have reached the limitations. }, function(delay) { // This is an optional conditional function. // It gets an parameter 'delay' passed in which // indicates when the call will get executed. // If delay is 0 the call will get executed immediately (although asynchronily). // Returning 'false' will prevent the call from being executed. }); License
Copyright (c) 2014 Simon Kusterer Licensed under the MIT license.
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。