Node.js HTTP/HTTPS Agent with Infinite Sockets

2.0.3 · active · verified Wed Apr 22

infinity-agent is a Node.js utility package that provides custom HTTP and HTTPS agents configured with `maxSockets` set to `Infinity`. It effectively mirrors the behavior of Node.js core `http.Agent` and `https.Agent` classes but modifies them to allow an unlimited number of concurrent outgoing requests. This can be critical for high-throughput applications or services that experience `maxSockets` exhaustion with default Node.js agents. The current stable version is 2.0.3. As a wrapper around Node.js core modules, its release cadence tends to be stable, with updates driven by bug fixes or significant changes in Node.js's underlying network modules. A key differentiator is its out-of-the-box support for an unbounded connection pool, requiring minimal configuration to achieve high concurrency without the usual `maxSockets` limitations. It also includes a minor modification to the `addRequest` method that disables `keepAlive` if the agent isn't explicitly configured for it and `maxSockets` is set to `Infinity`, which is a subtle behavioral difference from the standard Node.js agent.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to use `infinity-agent` to perform multiple concurrent HTTP and HTTPS GET requests, leveraging its `maxSockets: Infinity` configuration to manage an unbounded connection pool.

const infinityAgent = require('infinity-agent');
const http = require('http');
const https = require('https');

async function makeRequests() {
  console.log('Making 5 concurrent HTTP requests with infinity-agent...');
  const httpPromises = Array.from({ length: 5 }, (_, i) => {
    return new Promise((resolve, reject) => {
      http.get('http://jsonplaceholder.typicode.com/posts/' + (i + 1), { agent: infinityAgent.http.globalAgent }, (res) => {
        let data = '';
        res.on('data', (chunk) => (data += chunk));
        res.on('end', () => {
          console.log(`HTTP Request ${i + 1} finished (Status: ${res.statusCode})`);
          resolve(JSON.parse(data).id);
        });
      }).on('error', reject);
    });
  });

  console.log('Making 5 concurrent HTTPS requests with infinity-agent...');
  const httpsPromises = Array.from({ length: 5 }, (_, i) => {
    return new Promise((resolve, reject) => {
      https.get('https://jsonplaceholder.typicode.com/comments/' + (i + 1), { agent: infinityAgent.https.globalAgent }, (res) => {
        let data = '';
        res.on('data', (chunk) => (data += chunk));
        res.on('end', () => {
          console.log(`HTTPS Request ${i + 1} finished (Status: ${res.statusCode})`);
          resolve(JSON.parse(data).id);
        });
      }).on('error', reject);
    });
  });

  try {
    const httpResults = await Promise.all(httpPromises);
    const httpsResults = await Promise.all(httpsPromises);
    console.log('\nAll HTTP requests completed successfully. IDs:', httpResults);
    console.log('All HTTPS requests completed successfully. IDs:', httpsResults);
  } catch (error) {
    console.error('\nOne or more requests failed:', error.message);
  }
}

makeRequests();

view raw JSON →