WWW.lllT.neT这篇文章内容带各位了解一下Node中的事情,聊一聊一下事情驱动软件和EventEmitter 类,期待对各位有些协助!

Nodejs 是单过程单核应用软件,可是由于 V8 模块给予的多线程实行调整插口,根据这种插口可以解决很多的高并发,因此特性十分高。

Node.js 几乎每一个 API 全是适用调用函数的。

Node.js 大部分全部的事情体制全是用策略模式中观察者模式完成。

Node.js 单核相近进到一个while(true)的事情循环系统,直到沒有事情观测者撤出,每一个多线程事情都转化成一个事情观测者,如果有事情产生就读取该调用函数。


事情驱动软件

Node.js 应用量化策略实体模型,当web server接受到post请求,就把它关掉随后开展解决,随后去服务项目下一个webpost请求。

当这一post请求进行,它被放入解决序列,当抵达序列开始,这一結果被回到给客户。

这一实体模型十分高效率扩展性比较强,由于 webserver 一直接纳post请求而不等候一切存取数据。(这也称作非堵塞式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);
    }
})

下面使我们实行以上编码:

1.png

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类的详尽具体内容,大量请关心自学java网其他相关文章!

WWW.lllT.neT

声明:有的资源来自网络转载,版权归原作者所有,如有侵犯到您的权益请联系邮箱:our333@126.com我们将配合处理!

原文地址:聊一聊Node.js中的事情驱动软件和EventEmitter类发布于2021-12-13 14:18:01