接下来我们删除 input.txt 文件,执行结果如下所示:
程序执行完毕 Error: ENOENT, open 'input.txt'
因为文件 input.txt 不存在,所以输出了错误信息。
【建站服务】浙江省长兴网站建设-长兴网络公司-优化-制作-设计推广-长兴网站建设服务中心-域名申请
作者: 风兰 . 阅读量: 4 . 发表时间:2022-09-21 02:03:20
上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
浙江省长兴网站建设-长兴网络公司-优化-制作-设计推广-长兴网站建设服务中心

长兴古称长城。春秋吴越争霸时期(前514—前495年),吴王阖闾派弟夫概在今雉城东南两里处筑城,作为夫概王邑。因城狭长,故名长城,已有2500多年的历史。 [1]
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。
Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.readStream 对象会在文件被打开的时候触发一个事件。 所有这些产生事件的对象都是 events.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 毫秒以后向 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 注册了两个事件监听器,然后触发了 someEvent 事件。
运行结果中可以看到两个事件监听器回调函数被先后调用。 这就是EventEmitter最简单的用法。
EventEmitter 提供了多个属性,如 on 和 emit。on 函数用于绑定事件函数,emit 属性用于触发一个事件
接下来我们删除 input.txt 文件,执行结果如下所示:
程序执行完毕 Error: ENOENT, open 'input.txt'
因为文件 input.txt 不存在,所以输出了错误信息。
浙江省长兴网站建设-长兴网络公司-优化-制作-设计推广-长兴网站建设服务中心
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)
关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站



岳小弟
shu***zizuo2018@126.com
注:Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。
什么是单进程单线程?直接读到再去敲实例,根本不理解到底是什么意思。这个问题就必须讲下什么是进程,什么是线程。
进程:CPU执行任务的模块。线程:模块中的最小单元。
例举:cpu比作我们每个人,到饭点吃饭了。可以点很多菜(cpu中的进程):宫保鸡丁,鱼香肉丝,酸辣土豆丝。每样菜具体包含了哪些内容(cpu每个进程中的线程):宫保鸡丁(详情:黄瓜、胡萝卜、鸡肉、花生米)。而详情构成了宫保鸡丁这道菜,吃了以后不饿。就可以干活了,cpu中的进程里的线程也是同理。当线程完成自己的内容将结果返回给进程,进程返回给cpu的时候。cpu就能处理日常需求。
岳小弟
shu***zizuo2018@126.com
单进程单线程:一盘炒苦瓜,里面只有苦瓜。
单进程多线程:一盘宫保鸡丁,里面有黄瓜、胡萝卜、鸡肉、花生米
lu
bai***tar@gmail.com
首先说事件
事件就是需要 eventEmitter.on 去绑定一个事件 通过 eventEmitter.emit 去触发这个事件其次说的是 事件的 接收 和 发生 是分开的 就像 一个外卖店你可以不停的接受很多订单, 接受以后开始告诉厨师去做外卖, 做好的外卖对应的外送给每个用户,如果单线程的话那只能是接收一个订单, 做好以后在接收下一个外卖订单,明显效率非常低。
事件可以不停的接受不停的发生也是为了提高效率。
lu
bai***tar@gmail.com
Java开发老菜鸟
sam***@foxmail.com
1、eventEmitter.emit 是触发事件(事件请求),eventEmitter.on是绑定处理事件的处理器(事件处理),事件的请求和处理是分开的,所以是异步。
2、如果把下面两个例子写在一起执行:
//例子1 var fs = require("fs"); fs.readFile('text.txt', function(err, data) { if (err) return console.error(err); console.log(data.toString()); console.log("end"); console.log("***********************"); }); //例子2 var events = require("events"); var eventEmitter = new events.EventEmitter(); var connectHandler = function connected() { console.log("connnect successfully !"); eventEmitter.emit("after_connect"); } eventEmitter.on("connected", connectHandler); eventEmitter.on('after_connect', function() { console.log("after connect"); }); eventEmitter.emit("connected"); console.log("event emitter end");你会发现,例子 2 先输出,例子 1 后输出,可以验证是异步的,因为例子 1 需要进行 IO 耗时较长,但是例子 2 是直接输出信息,耗时较短,在两者几乎同时执行的情况下,例子 2 优先执行完。
Java开发老菜鸟
sam***@foxmail.com
韩非
171***818@qq.com
事件处理例子执行顺序如下:
var events = require('events'); var eventEmitters = new events.EventEmitter(); var connectHandle = function connected(){ console.log('再执行eventHandle'); eventEmitters.emit('data-receive') } eventEmitters.on('data-receive',function(){ console.log('最后接收数据'); }) eventEmitters.on('connection',connectHandle); console.log('先执行connection'); eventEmitters.emit('connection'); console.log('程序处理完成');韩非
171***818@qq.com
junwind
865***609@qq.com
这一篇里,定义的匿名函数使用了函数名,其实不加更优:
var connectHandler = function () { console.log('连接成功。'); eventEmitter.emit('data_received'); } eventEmitter.on('connection', connectHandler);//注册一个connection事件,connectHandler为其处理程序或者直接用:
eventEmitter.on('connection', function () { console.log('连接成功。'); eventEmitter.emit('data_received'); });