[英]Node.js dynamically extend piped stream
我想对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
返回您正在输送到的流 。 换句话说: stream.pipe(encryptStream)
返回encryptStream
。 第一次迭代就很好了: stream
最初是tar.Pack()
流,因此可以通过管道encryptStream
到encryptStream
。 然而,第二迭代将管stream
现在等于encryptStream
到自身 。
您可能想为每次迭代创建一个新的中间加密流,例如:
for (i = 0; i < algorithmCount; i++) {
stream = stream.pipe(createEncryptStream());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.