Я выполняю несколько http-вызовов в лямбда-сервисе AWS.Количество звонков ~ 400 в минуту.Вызовы выполняются как в следующем фрагменте
var req = http.get("https://www.google.com", res => {
let body = '';
res.on('data', chunk => {
body += chunk;
});
res.on('end', chunk => {
if (body.includes('html')) {
console.log('Got back healthy response');
} else {
console.log('Got an unexpected response');
}
})
});
req.on('error', e => {
console.log('Got an error response');
})
Это простой запрос https.Когда вызывается лямбда, он выполняет ~ 40 запросов за одно выполнение.Моя проблема в том, что в начале все выглядит хорошо и все запросы выполняются правильно.Через некоторое время (это может быть через ~ 30 мин) звонки начинают ухудшаться, и я получаю сообщение об ошибке «Ошибка повешения сокета».
Затем я попытался использовать модуль запроса и изменил код следующим
const request = require('request');
request("https://www.google.com", function (error, response, body) {
if (!error && response.statusCode == 200 && body.includes('html')) {
console.log('Got back healthy response' );
} else {
console.log('Got an unexpected response');
console.log('Error: ' + error);
console.log('Response: ' + response);
console.log('Body: ' + body);
}
});
В этом случае, при одинаковом количестве запросов в одной и той же лямбде, одна и та же настройка I never получает ошибку ECONNRESET.Я в порядке, используя модуль запроса, но мне любопытно узнать, почему это происходит с реализацией http
по умолчанию.Это вызвано распределением сокетов, которое модуль request
обрабатывает более подходящим способом?
Я знаю, что подобные вопросы уже задавались, но я не нашел хорошего ответа для своего случая.