process.on('이벤트이름', function(파라미터1, 파라미터2, ... 파라미터n) {
... 이벤트가 발생한 경우 실행될 기능을 구현 ...
});
process.emit('이벤트이름', 파라미터1, 파라미터2, ... 파라미터n);
Node.js 기반으로 만들어진 서버가 가동되면, 변수들을 initialize 하고, 함수를 선언하고 이벤트가 일어날때까지 기다립니다.
이벤트 위주 (Event-Driven) 어플리케이션에서는, 이벤트를 대기하는 메인 루프가 있습니다.
그리고 이벤트가 감지되었을시 Callback함수를 호출합니다.
이벤트 핸들링은옵저버 패턴
에 의해 작동
이벤트를 대기하는 (EventListeners) 함수들이 옵저버 역할을 합니다.
옵저버들이 이벤트를 기다리다가, 이벤트가 실행되면 이벤트를 처리하는 함수가 실행됩니다.
// events 모듈 사용
let events = require('events');
// EventEmitter 객체 생성
let eventEmitter = new events.EventEmitter();
// event와 EventHandler를 연동 (bind)
// eventName 은 임의로 설정 가능
eventEmiiter.on('eventName', eventHandler);
eventEmitter.emit('eventName');
addListener(event, listener)
: on() 메소드와 같습니다. 이벤트를 생성하는 메소드입니다.
.on(event, listener)
: addListener()과 동일합니다. 이벤트를 생성하는 메소드입니다.
once(event, listener)
: 이벤트를 한 번만 연결한 후 제거합니다.
removeListener(event, listener)
: 특정 이벤트의 특정 이벤트 핸들러를 제거합니다. 이 메소드를 이용해 리스너를 삭제하면 리스너 배열의 인덱스가 갱신되니 주의해야 합니다.
.removeAllListeners([event])
: 모든 이벤트 핸들러를 제거합니다.
.off([event])
: removeListener와 기능이 같습니다.
.setMaxListeners(n)
: n으로 한 이벤트에 최대허용 개수를 정해줍니다. node.js는 기본값으로 한 이벤트에 10개의 이벤트 핸들러를 작성할 수 있는데, 11개 이상을 사용하고 싶다면 n값을 넘겨주면 됩니다. n값으로 0을 넘겨 주면 연결 개수 제한이 사라집니다.
.emit(eventName[, ...args])
: 이벤트를 발생시킵니다.
.listenerCount(이벤트명)
: 현재 리스너가 몇개 연결되어 있는지 확인
# EventEmiter를 사용하여 직접 정의한 객체가 이벤트를 갖도록 구현하기
const { EventEmitter } = require('events');
const Radio extends EventEmitter {
constructor() {
// 클래스의 상속이 이루어졌으므로
// 생성자에서 상위 클래스의 생성자를 호출하도록 지정. ---> 상속 구현
// new 키워드에 의해서 호출되기 전까지 생성자는 실행되지 않는다.
super();
}
}
const radio = new Radio();
radio.setMaxListeners(5);
이벤트 이름은 사용자가 직접 정의
const onTurnOn = (channel) => console.debug('라디오가 켜졌습니다. 채널번호=' + channel);
radio.on('turnon', onTurnOn);
radio.on('turnon', (channel) => console.log('Hello Radio' + channel));
radio.addListener('changechannel', (channel) => console.log('채널이 %d 번으로 변경되었습니다.', channel));
radio.once('turnoff', (channel) => console.log('라디오가 꺼졌습니다. 채널번호=' + channel));
for (let i = 0; i < 2; i++) {
console.group('%d번째 실행중...', i + 1);
radio.emit('turnon', i);
radio.emit('changechannel', i);
// once로 이벤트가 정의되었으므로 한번만 실행된다.
radio.emit('turnoff', i);
console.debug();
console.groupEnd();
}
radio.removeListener('turnon', onTurnOn);
radio.emit('turnon', 1000);
📖 도움 받은 글 : https://inpa.tistory.com/entry/NODE-%F0%9F%93%9A-require-%EB%AA%A8%EB%93%88