Nodejs EventEmitter
Node.js所有异步I/O操作在完成时都会发送一个事件到事件队列.events模块只提供一个对象:events.EventEmitter.EventEmitter的核心就是事件触发与实践监听器功能的封装.
EventEmitter的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的寓意.EventEmitter支持若干个事件监听器.当事件触发时,注册这个事件的监听器被依次调用,事件参数作为回调参数传递.
var events=require('events');
var eventEmitter = new events.EventEmitter();
//监视器#1
var listener1=function listener1(arg1,arg2){
//console.log(arg1+arg2);
console.log('监视器listen1执行');
}
//监视器#2
var listener2=function listener2(arg1,arg2){
//console.log(arg1+arg2);
console.log('监视器listen2执行');
}
//绑定connection事件,处理函数为listen1
eventEmitter.addListener('connection',listener1);
//绑定connection事件,处理函数为listen2
eventEmitter.on('connection',listener2);
var eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners + " 个监听器监听连接事件。");
// 处理 connection 事件
eventEmitter.emit('connection','arg1','arg2');
// 移除监绑定的 listener1 函数
eventEmitter.removeListener('connection', listener1);
console.log("listener1 不再受监听。");
// 触发连接事件,将事件参数传递给回调函数
eventEmitter.emit('connection','arg1','arg2');
eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners + " 个监听器监听连接事件。");
console.log("程序执行完毕。");
2 个监听器监听连接事件。
监视器listen1执行
监视器listen2执行
listener1 不再受监听。
监视器listen2执行
1 个监听器监听连接事件。
程序执行完毕。