노드는 이벤트 루프 기반이므로 많은 객체가 이벤트를 발생시킬 수 있다.
이벤트를 다룰 때 사용하는 용어는 아래와 같다.
- emit : 이벤트 발생
- 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');
참고자료
'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 |