Programming/웹프로그래밍

[NodeJs] NodeJs 이벤트 사용하기 - Event Emitter

쌍쌍바나나 2016. 3. 29. 13:02
반응형

들어가며

  NodeJs는 일반적인 'procedural programming'의 개념과는 다른 'event driven programming' 개념을 가지고 있습니다. 'event driven programming'은 특정 이벤트가 발생할때,  미리 선언된 함수가 호출 되는 형태를 말합니다. 일반적으로 순차적으로 실행하는 프로그램이과는 다르기 때문에 언제 어디가 호출 될지 모릅니다.  이러한 이벤트 방식은 안드로이드에서 버튼 클릭 이벤트와 같이 callback 함수를 바인딩 시켜놓은 형태와 라고 할 수 있습니다.  이번 포스팅에서는 이러한 event를 연결, 제거, 생성, 발생 등 어떻게 해야하는지에 대해서 설명하겠습니다. 

연결

  • on('eventname', eventHandler)
  • 연결 개수 제한은 10개
    • setMaxListener(limit)
    • limit = 0 // 0(zero)를 넣으면 무한이 됩니다.
  • 1회만 연결은
    • once('eventname', eventhandler)

제거

  • removeListener('eventname', handler)
  • removeAllListeners(['eventname'])

이벤트 강제 발생

  • emit('eventname' [....]);

이벤트 생성

  • 사용자 정의 이벤트
  • EventEmitter 객체 생성
  • var custom = new events.EventEmitter()

예제코드

  아래 예제 코드는 사용자가 직접 EventEmitter를 상속 받아서 이벤트를 생성한 예제 코드 입니다. 내장 모듈인 events 를 사용해 MyStream이라는 custom Event를 생성했습니다. custom Event에 'data' 이름의 event를 등록을 해 놓고,  eventHandler로는 화면에 'data event:' + data를 출력해주는 function을 바인딩을 해놓았습니다. MyStream의 prototype에 이벤트를 강제 발생하는 emit이 포함된 write라는 함수를 등록을 해놓았기 때문에 마지막줄에서 stream.write("hello")를 실행하면 write의 emit함수에서 'data'라는 이벤트의 이름을 가진 이벤트에게 전달하기 때문에 최종적으로는 'data event:' hello가 화면에 출력됩니다.

var util = require('util');
var EventEmitter = require('events');

function MyStream(){
	EventEmitter.call(this);
}
util.inherits(MyStream, EventEmitter);

MyStream.prototype.write = function(data){
	this.emit('data', data);
};

var stream = new MyStream();

stream.on('data', function(data){
	console.log('data event:' + data);
});

stream.write('hello');
// data event : hello


반응형