References
https://mylko72.gitbooks.io/node-js/content/chapter5/chapter5_2.html
Stream의 정의
Stream은 파일 접근이나 http의 요청으로 데이터 열람 및 변경에 사용된다.
사용 목적은 데이터 전송을 위한 공통 구조를 제공하기 위함으로 이때, 데이터가 읽을 수 있게 되면 data 이벤트를, 오류가 발생되면 error 이벤트가 발생된다.
또한, 파일이나 http의 요청을 읽기 가능한 Stream으로 만들어 필요한 형태에 맞게 커스터마이징을 할 수 있다.
Readable Stream
다른 resource로부터 application으로 데이터를 쉽게 읽을 수 있는 구조를 제공한다.
read([size])
Stream에서 String이나 Buffer, null 형태의 데이터를 읽는다.
size 인자를 지정한 경우 읽는 데이터의 크기가 제한된다.
setEncoding(encoding)
read()함수 요청 결과를 String 형태로 Encoding 반환한다.
pause()
객체에서 생성되는 data 이벤트를 중지한다.
resume()
객체에서 생성되는 data 이벤트를 재개한다.
pipe(destination, [options])
출력 Stream을 destination 필드에 지정된 Writable Stream 객체에 연결한다.
여기서 {end:true}는 Readable Stream이 끝나는 시점에 Writable Stream도 끝나는 것을 의미한다.
unpipe([destination])
Writable Stream에서의 객체를 제거한다.
Writable Stream
write(chunk, [encoding], [callback])
Stream 객체의 데이터 위치에서 데이터 청크를 쓴다. 이때, 데이터는 String이나 Buffer 형태다.
encoding이 지정되면 문자열 데이터의 인코딩 정보로 사용된다.
callback이 지정되면 데이터가 비워진 이 후 호출된다.
end(chunk, [encoding], [callback])
write()와 동일한 맥락이지만 데이터를 더 이상 수용하지 않고 finish이벤트를 보낸다.
Duplex Stream
Readable Stream과 Writable Stream을 합친 개념으로 Socket 연결이 생성된 후에 읽기 및 쓰기가 가능하다.
// Duplex Stream 객체 구현
var util = require('util');
util.inherits(MyDuplexStream, stream.Duplex);
// 호출을 통해 객체를 생성
stream.Duplex.call(this, opt);
// read(size)와 _write(data, encoding, callback)을 모두 구현하여 Duplex Stream을 구현한다.
var stream = require('stream');
var util = require('util');
util.inherits(Duplexer, stream.Duplex);
function Duplexer(opt) {
stream.Duplex.call(this, opt);
this.data = [];
}
Duplexer.prototype._read = function readItem(size) {
var chunk = this.data.shift();
if (chunk == "stop"){
this.push(null);
} else{
if(chunk){
this.push(chunk);
} else {
setTimeout(readItem.bind(this), 500, size);
}
}
};
Duplexer.prototype._write = function(data, encoding, callback) {
this.data.push(data);
callback();
};
var d = new Duplexer();
d.on('data', function(chunk){
console.log('read: ', chunk.toString());
});
d.on('end', function(){
console.log('Message Complete');
});
d.write("I think, ");
d.write("therefore ");
d.write("I am.");
d.write("Rene Descartes");
d.write("stop");
read: I think, therefore
read: I am.
read: Rene Descartes
Message Complete
'Self-Study > 기타' 카테고리의 다른 글
[Network] SSE (0) | 2022.07.05 |
---|---|
[Embedded] watch dog (0) | 2022.07.05 |
[Git] stash (0) | 2022.07.04 |
[Typescript] 데코레이터의 기본구조 (0) | 2022.07.04 |
[NPM] npm ci (0) | 2022.07.04 |
최근댓글