Node.js

[node.js] 이벤트

behonestar 2015. 5. 5. 15:25

노드는 이벤트 루프 기반이므로 많은 객체가 이벤트를 발생시킬 수 있다.

이벤트를 다룰 때 사용하는 용어는 아래와 같다.

  1. emit : 이벤트 발생
  2. listener : 이벤트가 발생했을 때 실행되는 함수


이벤트 기본모듈은 require('events')로 불러온다. 웹 서버에 새로운 요청이 들어왔을 때 이벤트가 발생하는데 발생한 이벤트는 모두 events.EventEmitter 객체이고 require('events').EventEmitter로 접근한다. EventEmitter 객체에 에러가 발생하면 error 이벤트가 발생한다. 만약 error 이벤트에 등록된 리스너가 있으면 리스터를 실행하고 없으면 스택 트레이스 출력 후 애플리케이션을 종료한다.



리스너 등록


객체에 이벤트를 추가하려면 emitter.addListener(event, listener) 또는 emitter.on(event, listener)를 사용한다. 일반적으로 addListener()보다 on() 함수를 더 많이 사용한다.

server.on('connection', function(stream) {
    console.log('서버에 연결되었습니다.');
})


한 번만 실행해야 하는 리스너는 emitter.once(event, listener)를 사용한다. emitter.once(event, listener)로 등록한 리스너는 최초 한 번만 실행되고 리스너 배열에서 제거된다.

server.once('connection', function(stream) {
    console.log('첫번째 접속입니다.');
})


새로운 리스너가 추가될 때마다 newListener 이벤트가 발생한다. newListener 이벤트의 리스너는 function(event, listener){}이며 추가된 이벤트명과 리스너 함수를 파라미터로 돌려준다.



리스너 제거


emitter.removeListener(event, listener)를 사용하면 지정한 이벤트에서 전달한 리스너를 제거한다. 연결된 모든 리스너를 제거하려면 emitter.removeAllListenres([event])를 사용하는데, 파라미터를 전달하지 않으면 모든 이벤트의 리스너를 제거한다.

var callback = function(stream) {

console.log('연결됐습니다.');

};

server.on('connection', callback);

server.removeListener('connection', callback);



이벤트 발생


이벤트를 발생시키려면 emitter.emit(event, [arg1], [arg2], ...)를 사용한다.



이벤트 객체 만들어보기


아래 과정을 수행하는 예제이다.

1. 이벤트 객체 생성

2. 리스너를 등록

3. 이벤트를 발생

var events = require('events');

var util = require('util');


// emit 이벤트를 발생시키는 오브젝트
var MyServer = function(){
    events.EventEmitter.call(this);
};


// MyServer 객체를 EventEmitter로부터 상속
util.inherits(myserver, events.EventEmitter);


// 객체 생성

var server = new MyServer();

// 객체에 리스너 등록

server.on('connection', function(){

console.log('connection 발생');

});


// 이벤트 발생
server.emit('connection');



참고자료

  1. NODE.JS 프로그래밍, 변정훈 지음
  2. http://bcho.tistory.com/885


'Node.js' 카테고리의 다른 글

[node.js] Token 기반 인증  (0) 2015.05.09
[node.js] HTTP Digest 인증  (0) 2015.05.09
[node.js] HTTP 동시 접속 성능 테스트  (0) 2015.05.05
[node.js] 특징  (0) 2015.05.05
[node.js] require() 그리고 module.exports  (0) 2015.05.05