我正在尝试创建一个通过HTTP从S3流对象的高速公路应用程序。
我的问题是,在加载开始后一分钟左右的高负载下,请求开始超时。当使用lsof -p <pid>检查来自nodejs进程的打开连接时,我可以看到该进程有50个与AWS的开放连接。(文档指出,这是AWS的默认最大连接。)
问题:如何关闭或重用与AWS的开放连接,以通过HTTP?继续服务对象
(希望)最小的工作示例
var express = require('express');
var app = express();
app.get('/', function (req, res) {
// [ some code to create the bucket key ]
const params = {
'Bucket' : BUCKET,
'Key' : '<objectkey>'
}
stream = s3.getObject(params).on('httpHeaders', function (statusCode, headers) {
res.set('Content-Length', headers['content-length']);
res.set('Content-Type', headers['content-type']);
this.response.httpResponse.createUnbufferedStream()
.pipe(res);
})
.send();
}
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});编辑:
How to close an AWS S3 read stream (AWSJavaScriptSDK)可能与
发布于 2020-07-29 06:58:41
对我来说,我不知道我对pipe()可能做错了什么,但是即使在成千上万个请求之后,下面的代码也不会被卡住:
var stream = s3.getObject(params).createReadStream()
stream.on('readable', () => {
data = stream.read()
if (data == null) {
return;
}
res.write(data);
});
stream.on('end', () => {
res.end();
});https://stackoverflow.com/questions/63135663
复制相似问题