首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS S3泄漏连接

AWS S3泄漏连接
EN

Stack Overflow用户
提问于 2020-07-28 13:48:45
回答 1查看 249关注 0票数 0

我正在尝试创建一个通过HTTP从S3流对象的高速公路应用程序。

我的问题是,在加载开始后一分钟左右的高负载下,请求开始超时。当使用lsof -p <pid>检查来自nodejs进程的打开连接时,我可以看到该进程有50个与AWS的开放连接。(文档指出,这是AWS的默认最大连接。)

问题:如何关闭或重用与AWS的开放连接,以通过HTTP?继续服务对象

(希望)最小的工作示例

代码语言:javascript
复制
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)可能与

  • 有关
EN

回答 1

Stack Overflow用户

发布于 2020-07-29 06:58:41

对我来说,我不知道我对pipe()可能做错了什么,但是即使在成千上万个请求之后,下面的代码也不会被卡住:

代码语言:javascript
复制
var stream = s3.getObject(params).createReadStream()

stream.on('readable', () => {
    data = stream.read()
    if (data == null) {
        return;
    }

    res.write(data);
});

stream.on('end', () => {
    res.end();
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63135663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档