2016-07-27 71 views
0

我想基準node.js系統。因此我創建了一個可以加密和壓縮文件的小程序(我希望應用程序能夠強化CPU)。我以爲我可以多次重複加密過程。但是,無論何時我想要動態管道流,程序在完成之前都會退出。有沒有辦法讓我可以等待流完成?Node.js動態擴展管道流

我的代碼如下所示:

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

回答

3

這可能是一個問題:

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

記住.pipereturns 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()); 
} 
+0

謝謝:)我沒有想過那個 – warch