3.Event Loop

node JS 2019. 12. 21. 17:35

Node.js에서는 이벤트를 많이 사용한다.

Node.js기반 서버가 작동하면 변수들을 초기화하고,

이벤트가 일어날때까지 기다린다.

이벤트가 감지되면 Callback함수를 호출한다.

(Callback에 관한거는 https://velopert.com/255이분이 정리를 잘 해두셨다. 보면 도움이 될거라 생각한다.)

이벤트가 Callback과 비슷해 보일 수 있지만 차이점은 콜백은 비동기식 함수에서 결과를 반환할 때 호출하고

이벤트 핸들링은 옵저버 패턴에 의해 작동한다.

옵저버 패턴은 디자인 패턴의 일종이다.

자료 설명: https://ko.wikipedia.org/wiki/%EC%98%B5%EC%84%9C%EB%B2%84_%ED%8C%A8%ED%84%B4

 

EventListeners 함수가 옵저버 역할을 하며, 이벤트를 기다리다가

이벤트가 실행하면 이벤트를 처리하는 함수가 실행되는 방식이다.

 

Node.js는  Event 모듈과  EventEmitter 클래스가 내장되어 있다.

이것을 이용해서 이벤트와 이벤트핸들러를 연동시킬 수 있다.

// events 모듈 사용
var events = require('events');

// EventEmitter 객체 생성
var eventEmitter = new events.EventEmitter();

연동시키는 방법은 다음과 같다.

// event와 EventHandler 를 연동(bind)
// eventName 은 임의로 설정 가능
eventEmitter.on('eventName', eventHandler);

프로그램 안에서 이벤트를 발생시킬 때 다음 코드를 사용한다.

eventEmitter.emit('eventName');

예제

// events 모듈 사용
var events = require('events');

// EventEmitter 객체 생성
var eventEmitter = new events.EventEmitter();

// EventHandler 함수 생성
var connectHandler = function connected(){
    console.log("Connection Successful");
    
    // data_recevied 이벤트를 발생시키기
    eventEmitter.emit("data_received");
}

// connection 이벤트와 connectHandler 이벤트 핸들러를 연동
eventEmitter.on('connection', connectHandler);

// data_received 이벤트와 익명 함수와 연동
// 함수를 변수안에 담는 대신에, .on() 메소드의 인자로 직접 함수를 전달
eventEmitter.on('data_received', function(){
    console.log("Data Received");
});

// connection 이벤트 발생시키기
eventEmitter.emit('connection');

console.log("Program has ended");

결과물

$ node main.js
Connection Successful
Data Received
Program has ended

 

EventEmitter 메소드에 관한거는 내용이 많다. 여기를 참고하자
https://nodejs.org/api/events.html#events_class_eventemitter

'node JS' 카테고리의 다른 글

6.Node js Express-2(EJS)  (0) 2020.01.11
5.Node js Express-1  (0) 2020.01.04
4.Http Module  (0) 2019.12.26
2.REPL과 NPM  (0) 2019.12.21
1.Node JS 세팅 및 http서버 개설  (0) 2019.12.15

WRITTEN BY
Clasha

,