无法流式传输大文件

时间:2014-06-22 18:12:57

标签: node.js stream

我有2个节点js服务器A和B,其中A连接到B以获取文件(大文件)。这是我用来处理流的代码。

        var downloadedAmount = 0;
        stream.on('data', function (data) {
            if (Buffer.isBuffer(data)) {
                downloadedAmount += data.toString('utf8').length;
            } else {
                downloadedAmount += data.length;
            }
            if (!res.write(data)) {
                stream.pause();
            }
        });
        res.on('finish', function () {
            console.log("Finish called");
            sendUsage(reqId, downloadedAmount); // this is a async db/network call
        });
        stream.on("end", function () {
            console.log("End called");
            res.end();
        });
        res.on("drain", function () {
            stream.resume();
        });

当它只是一个正在下载的文件时,它会下载文件。我的问题是当我尝试下载多个文件(大于300MB),这会增加服务器的负载,连接在B处关闭,所有文件都停在124MB。谁能告诉我这里我做错了什么?

更新:问题在于B服务器,因为直接多次下载(从浏览器请求)也倾向于停止在124MB左右。

1 个答案:

答案 0 :(得分:0)

确定。似乎问题完全在不同的位置。我更改了Apache服务器设置(B服务器使用它来获取文件

EnableSendfile On

现在可行。