2016-08-29 5 views
1

암호 스트림을 통해 여러 파일을 파이핑 한 다음 결과를 모두 같은 파일에 기록합니다. src_file_1.pipe(cipher, {end: false}).pipe(dest_file, {end: false});, src_file_2.pipe(cipher, {end: false}).pipe(dest_file, {end: false}); 등을 수행하여이 작업을 수행 할 수 있지만 쓰기가 완료된 시점을 알 수 없으므로 dest_file 스트림을 닫을 수 없습니다. 체인에 {end: false}을 지정하지 않으면 암호를 다시 사용할 수 없습니다 (동일한 암호를 다시 사용하는 것이 내 응용 프로그램의 요구 사항 임). 따라서 src_file1.on('end', function()...)체인이 끝나지 않고 데이터가 스트림 체인을 통과했을 때 감지

는이 데이터가 여전히 암호를 통해 실행되지 않았을 수 있습니다 실행하면 이후, 불충분하고, dest_file.on('finish, function()...) 내가 기본적으로 필요 그래서 .... 내가 {end: false}을 지정하지 않는 한 발생하지 않습니다 그것 때문에 사용하는 것은 불가능합니다 체인에서 아무 것도 끝내지 않고 스트림 체인이 현재로드를 처리했는지 여부를 알려주는 방법입니다.

+0

업데이트 : 최신 버전의 스트림 API에서 강제로 플러시를 수행하는 방법을 알고 있다면 효과가 있습니다. –

답변

0

간단히 말해 Node.js 스트림 API를 심각하게 해킹하지 않고 몇 가지 서브 클래 싱을 수행하지 않으면이 작업을 수행 할 수 없다는 것입니다. flush() 지원이 공용 API에서 제거 된 이후로, 체인에서 파이프를 사용하고 모든 데이터가 전달 될 것으로 예상하는 유일한 방법은 체인을 종료하는 것입니다.

제 경우에는 열어서 재사용하고 싶었던 일부 진행 스트림 스트림에 의존했지만 마지막으로보고 된 progress.transferred, progress.length, progress.percentage를 사용하여 간단히 다시 인스턴스를 작성했습니다. 매개 변수. 마찬가지로 매번 암호를 다시 인스턴스화해야했기 때문에 동일한 키와 iv를 특정 응용 프로그램에 다시 사용하고 있었기 때문에 성능 병목 현상이 발생하지 않았습니다.