Node.js动态扩展管道流

时间:2016-07-27 22:30:24

标签: javascript node.js

我想对node.js系统进行基准测试。

因此我创建了一个可以加密和压缩文件的小程序(我希望应用程序的CPU密集)。我认为多次重复加密过程是有意义的。但是每当我动态管道流时,程序就会在完成之前退出。有没有办法让我等到流完成?

我的代码如下所示:

            var readStream = fstream.Reader(sourcePath);
            var writeStream = fs.createWriteStream(sourcePath + '.tar.gz');

            var stream = readStream.on('error', function (e) {
                    handleError(e, errorMessageReadFile);
                })
                .pipe(tar.Pack()).on('error', function (e) {
                    handleError(e, errorMessageTarPack);
                });

            for (i = 0; i < algorithmCount; i++) {
                stream = stream.pipe(encryptStream).on('error', function (e) {
                    handleError(e, errorMessageEncrypt);
                });
                console.log("enc");
            }

            stream.pipe(gzip).on('error', function (e) {
                    handleError(e, errorMessageCompress);
                })
                .pipe(writeStream).on('error', function (e) {
                    handleError(e, errorMessageWriteFile);
                })
                .on('finish', function () {
                    console.log('done');
                });

1 个答案:

答案 0 :(得分:3)

这可能是一个问题:

for (i = 0; i < algorithmCount; i++) {
    stream = stream.pipe(encryptStream);
}

请记住.pipe returns the stream you're piping into。换句话说:stream.pipe(encryptStream)会返回encryptStream。第一次迭代很好:stream最初是tar.Pack()流,因此通过管道传输到encryptStream。但是,第二次迭代将管道stream现在等于encryptStream 自身

您可能希望为每次迭代创建中间加密流,例如类似的东西:

for (i = 0; i < algorithmCount; i++) {
    stream = stream.pipe(createEncryptStream());
}