He leído un montón de documentación, publicaciones de desbordamiento de pila y varias publicaciones de blog y parece que no puedo hacer que funcione la funcionalidad 'keepAlive'. ¿Que me estoy perdiendo aqui?
Mi servidor:
import express from "express"; var app = express(); var server = app.listen(3000); var connectionCount = 1; var requestCount = 1; server.keepAliveTimeout = (60 * 1000) + 1000; server.headersTimeout = (60 * 1000) + 2000; server.on('connection', function(socket) { console.log(`A new connection (${connectionCount}) was made by a client.`); connectionCount++; socket.setTimeout(30 * 1000); }); server.on('request', (request, response) => { console.log(`New request #${requestCount}!!`); requestCount++; }); app.get('/', (req, res) => { res.send('Hello World, from express'); });Mis solicitudes de envío de secuencias de comandos (nueva conexión cada vez que quiero 'keepAlive', por lo que es una conexión para estas solicitudes):
import axios from 'axios'; import http from 'http'; import https from 'https'; const httpAgent = new http.Agent({ keepAlive: true }); const httpsAgent = new https.Agent({ keepAlive: true }); const axiosInstance = axios.create(); for (let i = 1; i < 51; i++) { axiosInstance.get( 'http://localhost:3000', { httpAgent: httpAgent, httpsAgent: httpsAgent } ) .then(function (response) { console.log(response.data); console.log(`GET ${i}`) }) .catch(e => {console.error(e)}); }Me lo imaginé. "Simplemente" necesitaba await antes de mi llamada.
await axiosInstance.get()
Debe usar una versión más nueva de Node (estoy usando 14.18.1) para que esto funcione; de lo contrario, debe envolverlo todo en una función asíncrona.
¡Ojalá mi lucha ayude a alguien más :)!