Node.js Nodejs块和can';t在压缩文件流期间处理下一个请求

Node.js Nodejs块和can';t在压缩文件流期间处理下一个请求,node.js,express,stream,Node.js,Express,Stream,我正在尝试创建一个简单的应用程序,它将动态创建包含一些文件的ZIP,并将它们流式传输到客户端。几乎奏效了。我遇到的问题是,当正在进行流传输时,nodejs会阻塞。所有pendig请求将在完成当前流式处理后处理。但有趣的是,这些挂起的请求将同时处理所以它可以这样做!我不明白,为什么nodejs(expressjs?)在流式传输一个文件时不能开始处理下一个请求,我做错了什么…: 我使用node archiver作为流源 以下是我的部分代码: var express = require('expres

我正在尝试创建一个简单的应用程序,它将动态创建包含一些文件的ZIP,并将它们流式传输到客户端。几乎奏效了。我遇到的问题是,当正在进行流传输时,nodejs会阻塞。所有pendig请求将在完成当前流式处理后处理。但有趣的是,这些挂起的请求将同时处理所以它可以这样做!我不明白,为什么nodejs(expressjs?)在流式传输一个文件时不能开始处理下一个请求,我做错了什么…:

我使用node archiver作为流源

以下是我的部分代码:

var express = require('express');
var archiver = require('archiver');

var router = express.Router();

router.get('/job/:id', function(req, res) {
    var job = req.jobs[req.params.id];

    var archive = archiver('zip');
    archive.pipe(res);

    for (var n in job.files) {
        var f = job.files[n];
        archive.file(job.path + f, {name: f});
    }

    res.setHeader("content-type", "application/zip");
    res.setHeader("Content-Disposition", 'attachment; filename="reports.zip"')
    archive.finalize();
});

module.exports = router;
有什么建议吗?谢谢

编辑:我注意到另一个问题,完全与archiver无关。我有以下基本应用程序:

var http = require('http');
var fs = require('fs');

var server = http.createServer(function (req, res) {
    var stream = fs.createReadStream('file.blob');
    stream.pipe(res);
});
server.listen(31922);

告诉我,为什么它会卡在这个案子里?结果与使用archiver完全相同。我使用的操作系统是SmartOS(基于开放式Solaris),它是Unix。也许这是个问题?有什么想法吗?

似乎
Archiver
依赖于同步代码,github最近有一个问题需要解决:

考虑到它是同步的,这可能就是你的块的来源

引述:

该模块依赖于自述文件中所述的文件UTIL:“这是一个 同步实用程序集。因此,不应在 Node.js服务器。这适用于用户/命令行实用程序。“


对于你们所有正在为类似问题挣扎的人。我可能是在装傻。解决办法很简单。基本上测试方法是错误的。我的浏览器(和其他被测试的浏览器有类似的行为)在上一个请求未完成时阻止处理来自同一主机名的下一个请求。在这种情况下,由于下载仍在进行中,所以请求尚未完成。谢谢你的帮助

尝试
archive.append(fs.createReadStream(job.path+f),{name:f})
看看会发生什么。@Kekas,恐怕这会卡在代码的不同部分。我试图通过
var file=fs.createReadStream('file.blob')来流式传输一个简单的文件;文件管道(res)结果完全相同!:|所以这不是archiver的问题。当我发现有趣的东西时,我会告诉你的。