NodeJS 사용자 정의 흐름 구현 방법

머리말

흔히 볼 수 있 는 사용자 정의 흐름 은 네 가지 가 있 습 니 다.Readable(읽 기 가능 흐름),Writable(쓰기 가능 흐름),Duplex(이중 작업 흐름)와 Transform(변환 흐름),흔히 볼 수 있 는 사용자 정의 흐름 응용 은 HTTP 요청,응답,crypto 암호 화,프로 세 스 stdin 통신 등 이 있 습 니 다.
stream 모듈 소개
NodeJS 에서 사용자 정의 흐름 을 실현 하려 면 모듈 stream 에 의존 하여 직접 도입 해 야 합 니 다.다운로드 할 필요 가 없습니다.모든 종류의 흐름 은 이 모듈 내부 에서 제공 하 는 서로 다른 종류의 클래스 를 계승 하여 이 루어 집 니 다.
사용자 정의 읽 기 가능 한 흐름 구현
1.사용자 정의 읽 을 수 있 는 클래스 MyRead 만 들 기
사용자 정의 읽 기 가능 한 흐름 을 실현 하려 면 MyRead 클래스 를 만 들 고 stream 의 Readable 클래스 를 계승 하여 다시 쓰기read 방법,이것 은 모든 사용자 정의 흐름 의 고정 방식 입 니 다.

let { Readable } = require("stream");

//           
class MyRead extends Readable {
 constructor() {
 super();
 this.index = 0;
 }

 //            _read   
 _read() {
 this.index++;
 this.push(this.index + "");

 if (this.index === 3) {
  this.push(null);
 }
 }
}

우리 가 쓴read 방법 은 먼저 찾 아 실행 합 니 다.읽 을 때 push 방법 으로 데 이 터 를 읽 습 니 다.push 의 값 이 null 일 때 까지 멈 출 것 입 니 다.그렇지 않 으 면 읽 기 가 완료 되 지 않 았 다 고 생각 하고 계속 호출 할 것 입 니 다read 。
2.사용자 정의 읽 기 가능 한 흐름 검증

let myRead = new MyRead();

myRead.on("data", data => {
 console.log(data);
});

myRead.on("end", function() {
 console.log("    ");
});

// <Buffer 31>
// <Buffer 32>
// <Buffer 33>
//     
사용자 정의 스 트림 쓰기 가능
1.사용자 정의 스 트림 클래스 MyWrite 만 들 기
MyWrite 라 는 클래스 를 만 들 고 stream 의 Writable 클래스 를 계승 하여 다시 쓰기write 방법.

let { Writable } = require("stream");
//           
class MyWrite extends Writable {
 //            _write   
 _write(chunk, encoding, callback)) {
 callback(); //         
 }
}
내용 을 쓸 때 기본적으로 첫 번 째 기록 은 파일 에 직접 기록 합 니 다.뒤의 기록 은 모두 캐 시 영역 에 기록 합 니 다.콜백 을 호출 하지 않 으 면 첫 번 째 기록 만 기본 으로 할 수 있 습 니 다.콜백 을 호출 하면 캐 시 영역 을 비우 고 파일 을 기록 합 니 다.
2.사용자 정의 쓰기 가능 한 흐름 검증

let myWrite = new MyWrite();
myWrite.write("hello", "utf8", () => {
 console.log("hello ok");
});
myWrite.write("world", "utf8", () => {
 console.log("world ok");
});
// hello ok
// world ok
사용자 정의 듀 플 렉 스 구현
1.사용자 정의 듀 플 렉 스 클래스 를 만 듭 니 다.
이중 작업 흐름 은 읽 고 쓸 수 있 는 흐름 으로 이해 할 수 있 으 며,MyDuplex 라 는 클래스 를 만 들 고,stream 의 Duplex 클래스 를 계승 할 수 있 습 니 다.이중 작업 흐름 으로 읽 고 쓸 수 있 기 때문에 다시 써 야 합 니 다read 와write 방법.

let { Duplex } = require("stream");
//           
class MyDuplex extends Duplex {
 //            _read   
 _read() {
 this.push("123");
 this.push(null);
 }
 //            _write   
 _write(chunk, encoding, callback)) {
 callback();
 }
}
이중 작업 흐름 은 각각 Readable 과 Writable 의 기능 을 갖 추고 있 지만 읽 기와 쓰 기 는 서로 영향 을 주지 않 고 서로 관련 이 없다.
2.사용자 정의 이중 작업 흐름 검증

let myDuplex = new MyDuplex();
myDuplex.on("readable", () => {
 console.log(myDuplex.read(1), "----");
});
setTimeout(() => {
 myDuplex.on("data", data => {
 console.log(data, "xxxx");
 });
}, 3000);
// <Buffer 31> ----
// <Buffer 32> xxxx
// <Buffer 32> ----
// <Buffer 33> xxxx
readable 과 data 두 가지 읽 기 방식 이 모두 기본 값 으로 data 이 벤트 를 통 해 읽 기 때문에 보통 하나만 선택 하고 동시에 사용 하지 마 십시오.읽 기 스 트림 의 특징 은 읽 기 데이터 가 소 모 된 후에 잃 어 버 리 는 것 입 니 다.
사용자 정의 전환 흐름 Transform 구현
1.사용자 정의 스 트림 가능 한 클래스 MyTransform 만 들 기
전환 흐름 이란 읽 을 수 있 는 흐름 이 라 고도 할 수 있 고 쓸 수 있 는 흐름 이 라 고도 할 수 있 으 며,MyTransform 이라는 클래스 를 만 들 고,stream 의 Transform 클래스 를 계승 하여 다시 쓰기transform 방법,이 방법의 매개 변수 와write 동일.

let { Transform } = require('stream');
//           
class MyTransform extends Transform {
 //            _transform   
 _transform(chunk, encoding, callback)) {
  console.log(chunck.toString.toUpperCase());
  callback();
  this.push('123');
 }
}
사용자 정의 전환 흐름 의transform 방법 에 서 는 데 이 터 를 읽 는 push 방법 과 데 이 터 를 기록 하 는 callback 을 모두 사용 할 수 있 습 니 다.
2.사용자 정의 전환 흐름 검증

// demo.js
let myTransForm = new MyTransform();
//       
process.stdin.pipe(myTransForm).pipe(process.stdin);
명령 행 창 을 열 고 node demo.js 를 실행 한 다음 abc 를 입력 하면 명령 창 에 ABC 와 123 을 출력 합 니 다.사실은 변환 흐름 은 쓰기 가능 한 흐름 으로 표준 입력 에 기 록 됩 니 다.이때 stdin 의 역할 은 읽 기 흐름 입 니 다.즉,사용자 의 입력 을 읽 고 읽 은 후에 변환 흐름 은 읽 기 가능 한 흐름 으로 pipe 를 호출 합 니 다.사용자 가 입력 한 정 보 를 표준 출력 을 통 해 명령 행 창 에 기록 합 니 다.이 때 stdout 의 역할 은 스 트림 을 쓰 는 것 입 니 다.
총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 NodeJS 가 사용자 정의 흐름 을 실현 하 는 것 입 니 다.여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기