0.1.0 • Published 9 years ago

throttle-agent v0.1.0

Weekly downloads
3
License
MIT
Repository
github
Last release
9 years ago

throttle-agent

Standard - JavaScript Style Guide Flowtype npm version license

Node.js HTTP Agent with throttling. Agent is doing adjustment of request rate depending of connection throughput and settings.

Install

npm install throttle-agent --save

Usage

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 with canAcceptRequest() method (true) or check on request (false).
  • rate: Number - default rate limit. Override with getRate().
  • 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 default domain: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.