- <h1>Node.js EventEmitter
Node.js 所有的異步 I/O 操作在完成時都會發(fā)送一個事件到事件隊列绞幌。
Node.js里面的許多對象都會分發(fā)事件:一個net.Server對象會在每次有新連接時分發(fā)一個事件, 一個fs.readStream對象會在文件被打開的時候發(fā)出一個事件徊都。 所有這些產(chǎn)生事件的對象都是 events.EventEmitter 的實例。
events 模塊只提供了一個對象: events.EventEmitter辩蛋。EventEmitter 的核心就是事件觸發(fā)與事件監(jiān)聽器功能的封裝呻畸。
你可以通過require("events");來訪問該模塊。
以下實例通過 connection(連接)事件演示了 EventEmitter 類的應(yīng)用
var events = require('events');
var eventEmitter = new events.EventEmitter();
// 監(jiān)聽器 #1
var listener1 = function listener1() {
console.log('監(jiān)聽器 listener1 執(zhí)行悼院。');
}
// 監(jiān)聽器 #2
var listener2 = function listener2() {
console.log('監(jiān)聽器 listener2 執(zhí)行伤为。');
}
// 綁定 connection 事件,處理函數(shù)為 listener1
eventEmitter.addListener('connection', listener1);
// 綁定 connection 事件据途,處理函數(shù)為 listener2
eventEmitter.on('connection', listener2);
var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " 個監(jiān)聽器監(jiān)聽連接事件绞愚。");
// 處理 connection 事件
eventEmitter.emit('connection');
// 移除監(jiān)綁定的 listener1 函數(shù)
eventEmitter.removeListener('connection', listener1);
console.log("listener1 不再受監(jiān)聽。");
// 觸發(fā)連接事件
eventEmitter.emit('connection');
eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " 個監(jiān)聽器監(jiān)聽連接事件颖医。");
console.log("程序執(zhí)行完畢位衩。");
運行結(jié)果: