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.
9 years ago