【发布时间】:2019-03-06 06:44:41
【问题描述】:
我正在 AWS lambda 中执行一些 http 调用。通话次数约为每分钟 400 次。 调用执行如下 sn-p
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 请求。调用 Lambda 时,它会在一次执行中执行约 40 个请求。 我的问题是,一开始,一切看起来都很好,并且所有请求都正确执行。一段时间后(可能是大约 30 分钟后)调用开始降级,我返回“socket hang up ECONNRESET”错误。
然后我尝试使用请求模块并使用以下代码更改代码
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);
}
});
在这种情况下,在同一个 lambda 中具有相同数量的请求,相同的设置我 从不 得到 ECONNRESET 错误。
我可以使用请求模块,但我很想知道为什么默认的http 实现会发生这种情况。
这是由request 模块以更合适的方式处理的套接字分配引起的吗?
我知道已经有人问过类似的问题,但我没有为我的案例找到一个好的答案。
【问题讨论】:
标签: node.js aws-lambda node-modules