Node.js 이벤트 이미터
Node.js의 모든 비동기 I/O 작업은 완료되면 이벤트 대기열로 이벤트를 보냅니다.
Node.js의 많은 객체는 이벤트를 생성합니다. net.Server 객체는 새로운 연결이 있을 때마다 이벤트를 생성하고, fs.readStream 객체는 파일이 열릴 때 이벤트를 생성합니다. 이러한 이벤트 생성 객체는 모두 events.EventEmitter의 인스턴스입니다.
EventEmitter 클래스
events 모듈은 events.EventEmitter라는 하나의 개체만 제공합니다. EventEmitter의 핵심은 이벤트 트리거링과 이벤트 리스너 기능을 캡슐화하는 것입니다.
require("events");를 통해 이 모듈에 액세스할 수 있습니다.
// 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter();
EventEmitter 객체는 인스턴스화 중에 오류가 발생하면 'error' 이벤트를 트리거합니다. 새 리스너가 추가되면 'newListener' 이벤트가 시작되고, 리스너가 제거되면 'removeListener' 이벤트가 시작됩니다.
아래에서는 EventEmitter의 사용법을 설명하기 위해 간단한 예를 사용합니다.
//event.js 文件 var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); event.on('some_event', function() { console.log('some_event 事件触发'); }); setTimeout(function() { event.emit('some_event'); }, 1000);
실행 결과는 다음과 같습니다.
이 코드를 실행하고 1초 후에 콘솔 출력 'some_event 이벤트가 트리거됨'. 원칙은 이벤트 객체가 some_event 이벤트에 대한 리스너를 등록한 다음 setTimeout을 사용하여 1000밀리초 후에 이벤트 객체에 some_event 이벤트를 보내는 것입니다. 이때 some_event에 대한 리스너가 호출됩니다.
$ node event.js some_event 事件触发
EventEmitter의 각 이벤트는 이벤트 이름과 여러 매개변수로 구성됩니다. 이벤트 이름은 일반적으로 특정 의미를 표현하는 문자열입니다. 각 이벤트에 대해 EventEmitter는 여러 이벤트 리스너를 지원합니다.
이벤트가 발생하면 해당 이벤트에 등록된 이벤트 리스너가 순차적으로 호출되고, 이벤트 매개변수가 콜백 함수 매개변수로 전달됩니다.
다음 예를 들어 이 프로세스를 설명하겠습니다.
//event.js 文件 var events = require('events'); var emitter = new events.EventEmitter(); emitter.on('someEvent', function(arg1, arg2) { console.log('listener1', arg1, arg2); }); emitter.on('someEvent', function(arg1, arg2) { console.log('listener2', arg1, arg2); }); emitter.emit('someEvent', 'arg1 参数', 'arg2 参数');
위 코드를 실행하면 실행 결과는 다음과 같습니다.
$ node event.js listener1 arg1 参数 arg2 参数 listener2 arg1 参数 arg2 参数
위 예에서 이미터는 someEvent 이벤트에 대해 두 개의 이벤트 리스너를 등록한 후 트리거되었습니다. someEvent 이벤트.
실행 결과에서 두 개의 이벤트 리스너 콜백 함수가 연속적으로 호출되는 것을 볼 수 있습니다. 이것은 EventEmitter의 가장 간단한 사용법입니다.
EventEmitter는 on 및 emit과 같은 여러 속성을 제공합니다. on 함수는 이벤트 함수를 바인딩하는 데 사용되고 emit 속성은 이벤트를 트리거하는 데 사용됩니다. 다음으로 EventEmitter의 속성을 자세히 살펴보겠습니다.
Method
Serial number | Method & Description |
---|---|
1 | addListener(event,listener) 특정 이벤트에 대한 리스너를 리스너 배열 끝에 추가합니다. |
2 | on(event, listening) 문자열 이벤트와 콜백 함수를 받아 지정된 이벤트에 대한 리스너를 등록합니다. server.on('connection', function (stream) { console.log('someone connected!'); }); |
3 | once(이벤트, 리스너) 지정된 이벤트에 대한 일회성 리스너를 등록합니다. 즉, 리스너는 최대 한 번만 트리거되고 리스너는 트리거된 후 즉시 해제됩니다. server.once('connection', function (stream) { console.log('Ah, we have our first user!'); }); |
4 | removeListener(event, Listener) 지정된 이벤트에 대한 리스너를 제거합니다. 리스너는 해당 이벤트에 등록된 리스너여야 합니다. var callback = function(stream) { console.log('someone connected!'); }; server.on('connection', callback); // ... server.removeListener('connection', callback); |
5 | removeAllListeners([event]) 이벤트가 지정된 경우 지정된 이벤트에 대한 모든 리스너를 제거합니다. |
6 | setMaxListeners(n) 기본적으로 EventEmitters는 리스너를 10개 이상 추가하면 경고 메시지를 출력합니다. setMaxListeners 함수는 리스너 수의 기본 제한을 늘리는 데 사용됩니다. |
7 | listeners(event) 지정된 이벤트에 대한 리스너 배열을 반환합니다. |
8 | emit(event, [arg1], [arg2], [...]) 각 리스너를 매개변수 순서대로 실행합니다. 이벤트에 등록된 리스너가 있으면 true를 반환합니다. 그것은 거짓을 반환합니다. |
클래스 메서드
일련 번호 | 메서드 및 설명 |
---|---|
1 | listenerCount(emitter, event) 지정된 이벤트에 대한 리스너 수를 반환합니다. 이벤트 이름 |
listener
- 이벤트 처리 기능이 이벤트는 새 리스너가 추가되면 트리거됩니다. | |
---|---|
removeListener
| |