throttle-agent v0.1.0
throttle-agent
Node.js HTTP Agent with throttling. Agent is doing adjustment of request rate depending of connection throughput and settings.
Install
npm install throttle-agent --saveUsage
Use agent same way as http.Agent:
const Agent = require('throttle-agent')
const http = require('http')
const urlParser = require('url')
const URL = 'http://localhost:8000'
const TIMEOUT = 500
let keepAliveAgent = new Agent({
keepAlive: true,
maxSockets: 5,
rate: 15
})
function doRequest () {
let options = urlParser.parse(URL)
options.agent = keepAliveAgent
options.timeout = TIMEOUT
http.request(options, (res) => {
let str = ''
res.on('data', (chunk) => {
str += chunk
}).on('end', () => {
process.stdout.write(str)
})
}).end()
}
setInterval(() => {
for (var i = 0; i < 10; i++) doRequest()
}, 1)
setInterval(() => {
console.dir(keepAliveAgent.getStats())
}, 5000)or use canAcceptRequest() method to check before request object creation:
...
let keepAliveAgent = new Agent({
keepAlive: true,
maxSockets: 5,
rate: 15,
checkBeforeRequest: true
})
function doRequest () {
if (!keepAliveAgent.canAcceptRequest(URL)) return
// otherwise create request
...
}
...Options
checkBeforeRequest: Boolean - check before request withcanAcceptRequest()method (true) or check on request (false).rate: Number - default rate limit. Override withgetRate().rateInterval: Number - rate interval, milliseconds. Default 1000.rateLowerWeight: Number - weight of lowering of rate compared to raising of rate. Default 18.rateLowerKoef: Number - decrease of rate koefficient, default 0.1.rateRaiseKoef: Number - increase of rate koefficient, default 0.02.maxPending: Number - max pending requests, default 3000.maxBuffer: Number - max socket buffer size, default 50.getRate: RateCallback - function to return max rate for endpoint. Example:function getRate (name, flag) { return flag === 'domain1' ? 12 : 100; }getFlag: FlagCallback - function to get stat label from URL. Return '' to use Agent's defaultdomain:port:. Example:function getFlag (url) { return url === 'http://test.com' ? 'domain1' : 'general'; }getRateDirection: RateDirectionCallback - function to make decision of rate modification. Returns -1 to decrease, 1 to increase and 0 to do nothing. By default rate is increased on every 2xx, 3xx code or if there are free opened sockets available, and decreased on timeouts, errors or when pending sockets number is high.
10 years ago