-
[Node.js] 이벤트처리 'EventEmitter' 사용방법node.js(노드) 2020. 8. 11. 16:00
EventEmitter는 Node.JS에 내장되어 있는 일종의 옵서버 패턴 구현이다.
HTML,자바스크립트의 이벤트 리스너에서해당 이벤트를 등록해놓고 버튼에 따라 특정 이벤트를 사용하는 것을 사용해 본 적이 있을 거다.
이것도 비슷한 기능이다. 해당 변수에 여러 가지 이벤트를 등록해놓고 사용자가 원하는 이벤트를 골라 사용하는 방식이다.
우선 코드를 보자.
event.js
const EventEmitter = require('events'); this.eventPlay = null; this.eventPlay = new EventEmitter(); //연산자 생성 this.eventPlay.on('connection',(data)=>{ //이벤트 등록 console.log("connection 시작"); console.log("data : " + data); });
일단 당연히 events 모듈을 설치해야 한다.
그 후 해당 모듈을 사용하여 연산자를 만들고 해당 연산자에 "on"을 이용하여 이벤트를 등록한다.
this.eventPlay.on('connection',(data)=>{} //"connection" 이름의 이벤트 등록
이 부분은 connection이라는 이름의 이벤트를 등록한 부분이다.
추후에 부분을 사용하는 방법은 emit을 사용한다
const events = require('./event'); 우선 모듈 등록 events.eventPlay.emit('connection',"데이터"); //log값 : //connection 시작 //data : 데이터
물론 하나뿐만 아니라 해당 연산자 + emit('이벤트 이름', arg1, arg2,...) 이면 여러 이벤트를 사용할 수 있다.
const EventEmitter = require('events'); this.eventPlay = null; this.eventPlay = new EventEmitter(); //연산자 생성 this.eventPlay.on('connection1', (data) => { console.log("connection1 시작"); console.log("data : " + data); //데이터 }); this.eventPlay.on('connection2', (data1, data2) => { console.log("connection2 시작"); console.log("data : " + data1); //데이터1 console.log("data : " + data2); //데이터2 }); this.eventPlay.on('connection3', (data1, data2, data3) => { console.log("connection3 시작"); console.log("data : " + data1); //데이터1 console.log("data : " + data2); //데이터2 console.log("data : " + data3); //데이터3 }); this.eventPlay.emit('connection1',"데이터"); this.eventPlay.emit('connection2',"데이터1","데이터2"); this.eventPlay.emit('connection3',"데이터1","데이터2","데이터3");
그 외에도
once(이벤트명, 콜백) : 한번만 실행되는 이벤트
removeAllListeners(이벤트명) : 이벤트에 연결된 모든 이벤트 리스너를 제거
removeListener(이벤트명, 리스너) : 이벤트에 연결된 리스너를 하나씩 제거
off(이벤트명, 콜백) : 노드 10 버전에서 추가된 메서드 removeListener와 기능이 같다.
listenerCount(이벤트명) : 현재 리스너가 몇 개 연결되어 있는지 확인한다.
* 디폴트 값으로 한 개당 이벤트는 최대 10개까지만 등록할 수 있다.
참조 : https://edykim.com/ko/post/events-eventemitter-translation-in-node.js/
'node.js(노드)' 카테고리의 다른 글
[Node.js] Web push 정리 (1) Service Worker (0) 2020.09.12 [Node.js] NULL, undefined가 나왔을때 의심해볼만한곳 정리(계속 업데이트) (0) 2020.08.18 [node.js] 프로토 타입(prototype) (1) 2020.08.11 [node.js] 동기와 비동기(2) Callback과 async의Waterfall (0) 2020.08.10 [node.js] 동기와 비동기 (1) 기본 이해 (0) 2020.08.07