我的网络应用程序中有一项功能,允许用户上传和下载文件。我使用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服务器似乎挂起,无法再处理任何请求。如果我重新启动服务器,一切正常。对我而言,似乎代理请求中的套接字没有正确关闭,但我无法弄清楚原因。我的代理代码有问题吗?
答案 0 :(得分:1)
您需要增加pool.maxSockets
配置中传递的request()
值,因为它默认为节点的HTTP代理maxSockets
,即5,或者选择与pool: false
配置中的request()
完全没有连接池。