노드에서 Event란?
노드에서는 대부분의 이벤트를 비동기 방식으로 처리한다. 또한, 비동기 방식으로 이벤트를 전달한다. 이벤트는 한쪽에서 다른 쪽으로 알림 메시지를 보내는 것과 비슷하다. 노드에는 이런 이벤트를 보내고 받을 수 있도록 EventEmitter라는 것이 만들어져 있다. 노드의 객체는 EventEmitter를 상속 받을 수 있으며, 상속 받은 후에는 EventEmitter 객체의 on()과 emit() 메소드를 사용할 수 있다. on() 메소드는 이벤트가 전달될 객체에 이벤트 리스너를 설정하는 역할을 하는데 이 리스너 함수는 객체로 전달된 이벤트를 받아 처리할 수 있다.
emitter.addListener(event, listener) : on() 와 동일하다. 이벤트를 생성하는 메소드이다.
emitter.on(event, listener) : addListener()와 동일하다. 이벤트를 생성하는 메소드이다.
emitter.once(event, listener) : emitter.on과 같은 동작을 하지만 한번 호출된 후 제거된다.
emitter.removeListener(event, listener) : 특정 이벤트의 특정 이벤트 핸들러를 제거한다. 이 메소드를 이용해 리스너를 삭제하면 리스너 배열의 인덱스가 갱신되니 주의해야 한다.
emitter.off(event, listener) : removeListener()와 동일하다. 이벤트 핸들러를 제거하는 메소드이다.
emitter.removeAllListeners([event]) : 모든 이벤트 핸들러를 제거한다.
emitter.setMaxListeners(n) : n으로 한 이벤트에 최대 허용 개수를 정해준다. node.js는 기본 값으로 한 이벤트에 10개의 이벤트 핸들러를 작성할 수 있는데, 11개 이상을 사용하고 싶다면 n값을 넘겨주면 된다. n값으로 0을 넘겨 주면 연결 개수 제한이 사라진다.
emitter.emit(eventName[, ...args]) : 이벤트를 발생 시킨다.
Event 예제
// events 모듈 사용
var events = require('events');
// EventEmitter 객체 생성
var eventEmitter = new events.EventEmitter();
var param = {
"param1": 1,
"param2": 2,
"param3": 3
};
// initHandler 정의
var initHandler = function () {
console.log("init 이벤트 발생");
}
// addHandler 정의
var addHandler = function () {
var cnt = 1;
setInterval(function () {
console.log("add 이벤트 발생 " + '(' + cnt + ')');
cnt++;
if (cnt == 11) {
console.log("프로세스를 종료합니다.");
process.exit();
}
}, 1000);
}
// paramHandler 정의
var paramHandler = function (data) {
console.log("param 이벤트 발생");
console.log(data);
}
eventEmitter.on('init', initHandler); // 'init' 이라는 이름으로 initHandler를 등록!
eventEmitter.on('add', addHandler); // 'add' 이라는 이름으로 addHandler를 등록!
eventEmitter.on('param', paramHandler);
eventEmitter.emit('add'); // 'add' 이벤트 호출
eventEmitter.emit('init'); // 'init' 이벤트 호출
eventEmitter.emit('param', param); // 이벤트 호출 시 parameter를 넘겨줄 수 있다.
'TIL > Node.js' 카테고리의 다른 글
Express (0) | 2021.07.21 |
---|---|
Module (0) | 2021.07.21 |
Nodemon (0) | 2021.07.20 |
NPM(Nodejs Package Manager) (0) | 2021.07.13 |
Node.js 란 무엇인가? (0) | 2021.07.13 |