本文带大家了解一下Node里的事情,聊一聊一下事情驱动软件和EventEmitter 类,希望能帮助到大家!
Nodejs 是单进程单核应用软件,但因为 V8 模块所提供的异步执行回调接口,通过这个插口可以处理大量高并发,因此特性很高。
Node.js 几乎每一个 API 全是适用调用函数的。
Node.js 大部分每一个事件机制都是采用程序设计模式中观察者模式完成。
Node.js 单核相近进入一个while(true)的事件循环,直至并没有事情观测者撤出,每一个异步事件都生成一个事情观测者,若是有事情发生就启用该调用函数。
事情驱动软件
Node.js 应用量化策略实体模型,当web server接受到要求,就把它关掉然后再进行解决,然后再去服务项目下一个web要求。
当一个要求进行,他们被放入解决序列,当抵达序列开始,这样的结果被回到给消费者。
这个模型十分高效率扩展性特别强,由于 webserver 一直接纳要求且不等候一切读写操作。(这也叫做非阻塞式IO或是量化策略IO)
在量化策略模型中,会生成一个主循环系统来监视事情,当检测出情况时开启调用函数。
Node.js 有好几个内置的事情,我们通过引进 events 控制模块,并通过创建对象 EventEmitter 类来关联和监视事情,如下所示案例:
// 引进 events 控制模块
var events = require('events');
// 建立 eventEmitter 目标
var eventEmitter = new events.EventEmitter();
下列程序流程绑定事件处理过程:
// 绑定事件及事件处理过程
eventEmitter.on('eventName', eventHandler);
我们通过程序流程触发事件:
// 触发事件
eventEmitter.emit('eventName');
案例
建立 index.js
文档,编码如下所示:
//引进 fs 控制模块
var fs = require("fs");
// 引进 events 控制模块
var events = require('events');
// 创建对象
var ee = new events.EventEmitter();
// 绑定事件及事件处理过程
ee.on('res', function (data) {
console.log('res-1');
console.log(data);
});
ee.on('res', function () {
console.log('res-2');
});
fs.readFile('hello.txt',{flag:'r',encoding:'utf-8'},function(err,data){
if(err){
console.log("载入出差错:" err);
}else{
console.log("载入取得成功:" data);
// 开启res事情
ee.emit('res',data);
}
})
下面使我们实行之上编码:
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 事件触发' 。其原理是 event 目标申请了事情 some_event 的一个监控器,最后我们根据 setTimeout 在 1000 ms之后向 event 目标推送事情 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 主要参数
之上例子中,emitter
为事情 someEvent
申请了2个事情监控器,随后触动了 someEvent
事情。
运作结论中可以看出2个事情监控器调用函数被依次启用。 这便是EventEmitter
简单的使用方法。
EventEmitter
带来了好几个特性,如 on 和 emit。on 函数公式用以绑定事件函数公式,emit 特性用以开启一个事情。
大量node基本知识,请访问:nodejs 实例教程!!
以上就是关于聊一聊Node.js里的事情驱动软件和EventEmitter类具体内容,大量欢迎关注AdminJS其他类似文章!