Post List

Node EventEmitter, Streams

 EventEmitter

앞서 콜백을 등록해두고, event loop에 따라서 각 phase마다 완료된 작업에 대한 콜백을 실행해준다고 알게 되었다.
하지만 EventEmitter는, Event loop 와는 별 관계가 없다.
(https://velog.io/@ragnarok_code/EventEmitter%EB%9E%80  블로그에 설명이 되어있다)

Event loop는 시스템쪽에서 사용되는 것이라면, EventEmitter는 코드 위에서 사용되는 느낌이다.
EventEmitter는 비동기 호출이 필요한 곳에서 사용할 수 있다. (http 응답 대기 등등)
EventEmitter 에서 on 으로, emit 되었을 때 호출할 콜백을 넣어줄 수 있다. emit으로는 이벤트를 방출할 수 있다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const EventEmitter = require('events');

class Sales extends EventEmitter {
    constructor() {
        super();
    }
}

const myEmitter = new Sales();

myEmitter.on('newSale', () => {
    console.log('There was a new sale!'); 
});

myEmitter.on('newSale', () => {
    console.log('Customer name: Jonas'); 
});

myEmitter.on('newSale', stock => {
    console.log(`There are now ${stock} items left in stock`);
});

myEmitter.emit("newSale", null);

Streams

데이터를 읽고 쓰는 작업에서, 덩어리로 조각내어서 읽을 때 사용된다. 모든 읽기나 쓰기 작업이 끝나기를 기다리지 않고 메모리에 모든 데이터를 저장할 수 있다. 
넷플릭스, 유튜브에서 볼 수 있는, 모든 동영상을 내려받지 않고, 조각내서 읽어낸다.
모든 데이터를 메모리에 박아놓지 않아도 되므로, 조금 더 효율적이다.
EventEmitter class의 instance다.

- READABLE STREAMS: consumes data/ http requests, fs read streams / data, end 가 중요한 이벤트다. / pipe(), read()
- WRITABLE STREAMS: write data/ http response, fs write streams/ drain, finish가 중요한 이벤트 / write(), end()
- DUPLEX STREAMS: consume & write data / net web socket
- TRANSFORM STREAMS: Duplex stream인데, 데이터를 쓰거나 읽을 때 transform하는 스트림/ zlib Gzip creation에 사용함





댓글