TIL/Node.js

Event

Art Rudy
728x90
반응형

노드에서 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를 넘겨줄 수 있다.
728x90
반응형

'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