事情驱动软件和EventEmitter类

lxf2023-03-15 11:50:01

本文带大家了解一下Node里的事情,聊一聊一下事情驱动软件和EventEmitter 类,希望能帮助到大家!

事情驱动软件和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类

EventEmitter 类

events 控制模块只提供了一个目标: events.EventEmitterEventEmitter 的核心就是事件触发与事情监控器功能性的封装形式。

我们可以通过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 带来了好几个特性,如 onemiton 函数公式用以绑定事件函数公式,emit 特性用以开启一个事情。

大量node基本知识,请访问:nodejs 实例教程!!

以上就是关于聊一聊Node.js里的事情驱动软件和EventEmitter类具体内容,大量欢迎关注AdminJS其他类似文章!