javascript - Node.js 动态扩展管道流

标签 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');
                });

最佳答案

这可能是一个问题:

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 中。但是,第二次迭代会将现在等于 encryptStreamstream 传输到其自身中。

您可能希望为每次迭代创建一个中间加密流,例如像这样:

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

关于javascript - Node.js 动态扩展管道流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38624252/

相关文章:

javascript - Jquery:缩放图像无法正确显示

javascript - jQuery UI 对话框从缓存中选择标题

node.js - 最好的通过node.js上传文件的库?

javascript - 你可以在数据库中使用 "store"javascript,然后再执行它吗?

javascript - 获取文本区域中的行号

javascript - 在我的 PHP 页面中加载图像时出现问题

node.js - Mongoose 围绕 Min 和 Max 与 Number 的行为

node.js - Geddy - 运行附加进程 - Twitter Stream

javascript - PassportJS - 动态设置状态以允许在回调时重定向

javascript - Vuex:如何定义一个状态变量,其值基于另一个状态变量的值?