流式传输大文件导致服务器挂起

时间:2014-09-10 19:05:53

标签: node.js express

我的网络应用程序中有一项功能,允许用户上传和下载文件。我使用Express提供应用程序,但文件存储在不同的服务器中,因此我将请求代理到该服务器。这是使用request库的代理代码:

module.exports = function(req, res) {
    req.headers['x-private-id'] = getId();

    var url = rewriteUrl(req.url);

    var newRequest = request(url, function(error) {
        if (error) console.log(error);
    });

    req.pipe(newRequest).on('response', function(res) {
        delete res.headers['x-private-id'];
    }).pipe(res);
};

这适用于我的所有请求,包括下载文件。但是,在“流式传输”文件时遇到了问题。通过流式传输,我的意思是我使用fancybox来使用video标记来显示视频。视频在前几次显示正常。

但是,如果我关闭fancybox然后重新打开它足够多次(具体为5),那么之后就会退出;视频不再显示。整个Express服务器似乎挂起,无法再处理任何请求。如果我重新启动服务器,一切正常。对我而言,似乎代理请求中的套接字没有正确关闭,但我无法弄清楚原因。我的代理代码有问题吗?

1 个答案:

答案 0 :(得分:1)

您需要增加pool.maxSockets配置中传递的request()值,因为它默认为节点的HTTP代理maxSockets,即5,或者选择与pool: false配置中的request()完全没有连接池。