es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agente HTTP de Node.js preestablece la conexión TCP.

Estoy trabajando en una aplicación en la que se envían muchas solicitudes de red y he configurado un agente HTTP para reutilizar conexiones TCP, como se muestra a continuación, lo que se utilizaría en toda mi aplicación:

const https = require("https");
global.httpsAgent = new https.Agent({
    keepAlive: true,
})

Esto me permitirá reutilizar los sockets TCP que ya se han creado para que no tenga que crearlos de nuevo y ahorrar tiempo al tratar con muchas solicitudes HTTP. Pero antes de enviar cualquier solicitud HTTP, no habrá conexiones TCP. Entonces, la primera vez que envío una solicitud HTTP, tengo que esperar hasta que se establezca la conexión TCP. ¿Existe alguna forma de indicar al agente HTTPS que mantenga un número mínimo de sockets TCP gratuitos para un dominio en todo momento? Actualmente, cuando mi aplicación se inicia, solo estoy enviando solicitudes HTTP sin sentido para que las conexiones TCP se establezcan y se mantengan activas, como se muestra a continuación:

function establecerConexionesTcp(numConns) {
    let arr = [];

    for(let i=0; i<numconns; i++)="" {="" arr.push(="" 'fetch'="" se="" importa="" así:="" const="" fetch="require("node-fetch");" fetch("https://example.com",="" {="" agent:="" url=""> global.httpsAgent,
                headers: {
                    "connection": "keep-alive"
                }
            })
        );
    }

    return Promise.allSettled(arr);
}

Veo que hay una función llamada agent.createConnection(options[, callback]) definida en los documentos de NodeJS https://nodejs.org/api/http.html#agentcreateconnectionoptions-callback. ¿Es esto lo que estoy buscando? Y si es así, ¿cómo lo usaría?</numconns;>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, agent.createConnection() es lo que estás buscando. Esta función crea una nueva conexión TCP y la agrega directamente al conjunto de sockets libres del agente.

    Aquí tienes un ejemplo de cómo puedes usarlo:

    const https = require("https");
    
    // creando un nuevo agente con las opciones keepAlive y maxSockets
    const agent = new https.Agent({
        keepAlive: true,
        maxSockets: 10 // estableciendo un número máximo de sockets abiertos por origen
    });
    
    // creando una nueva conexión y añadiéndola al conjunto de sockets libres del agente
    const conn = agent.createConnection({ port: 443, host: 'example.com' }, () => {
        console.log('Se ha creado una nueva conexión y se ha añadido al conjunto de sockets del agente');
    });
    
    // utilizando el agente para enviar una solicitud con el nuevo socket
    https.get('https://example.com', { agent: agent }, (res) => {
        console.log('Se ha recibido una respuesta');
    });
    

    En el ejemplo anterior, creamos un nuevo agente con las opciones keepAlive y maxSockets. Luego, usamos agent.createConnection() para crear un nuevo socket y añadirlo al conjunto de sockets libres del agente. Finalmente, utilizamos el agente para enviar una solicitud con el nuevo socket.

    Ten en cuenta que agent.createConnection() es una API de bajo nivel y debe usarse con precaución. En general, el agente debe encargarse del conjunto de sockets y no debes crear conexiones manualmente.

Comments are closed.