文章目录
- 一、EventEmitter介绍
- 二、EventEmitter方法
- 三、EventEmitter类方法
- 四、EventEmitter事件
- 五、EventEmitter的error 事件
- 六、node介绍
- 七、相关链接
一、EventEmitter介绍
Node.js 的 EventEmitter 是一个核心模块,用于处理事件驱动的编程。它提供了一个事件发射器类,可以在其上注册事件监听器,并在特定事件发生时触发这些监听器。
下面是 EventEmitter 的主要概念和用法:
- 事件:事件是由 EventEmitter 类表示的字符串或数字。你可以在任何时候触发这些事件。
- 监听器:监听器是一个函数,当特定事件被触发时,它将被调用。你可以使用
on
方法添加监听器到特定事件。 - 触发事件:使用
emit
方法可以触发一个事件,所有注册到该事件的监听器都将被调用。 - 移除监听器:如果你不再需要一个监听器,可以使用
off
方法将其从事件中移除。 - 一次性监听器:使用
once
方法可以添加一个只触发一次的监听器。 - 错误事件:EventEmitter 定义了一个特殊的
error
事件,当任何其他事件失败时,都会触发该事件。
下面是一个简单的示例,演示如何使用 EventEmitter:
const EventEmitter = require('events');class MyEmitter extends EventEmitter {}const myEmitter = new MyEmitter();// 添加监听器
myEmitter.on('event', () => {console.log('Event has been triggered!');
});// 触发事件
myEmitter.emit('event'); // 输出: "Event has been triggered!"
在这个示例中,我们创建了一个继承自 EventEmitter 的自定义类 MyEmitter
,并创建了一个 myEmitter
实例。然后,我们使用 on
方法添加了一个监听器到 event
事件,并使用 emit
方法触发了该事件。监听器函数将输出一条消息,表示事件已被触发。
二、EventEmitter方法
- addListener(event, listener)为指定事件添加一个监听器到监听器数组的尾部。
- on(event, listener)为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。
server.on('connection', function (stream) {console.log('someone connected!');
});
- once(event, listener)为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。
server.once('connection', function (stream) {console.log('Ah, we have our first user!');
});
- removeListener(event, listener)移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。
它接受两个参数,第一个是事件名称,第二个是回调函数名称。
var callback = function(stream) {console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
- removeAllListeners([event])移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。
- setMaxListeners(n)默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于改变监听器的默认限制的数量。
- listeners(event)返回指定事件的监听器数组。
- emit(event, [arg1], [arg2], […])按监听器的顺序执行执行每个监听器,如果事件有注册监听返回 true,否则返回 false。
三、EventEmitter类方法
listenerCount(emitter, event)返回指定事件的监听器数量。
events.EventEmitter.listenerCount(emitter, eventName) //已废弃,不推荐
events.emitter.listenerCount(eventName) //推荐
四、EventEmitter事件
- newListener该事件在添加新监听器时被触发。
- event - 字符串,事件名称
- listener - 处理事件函数
- removeListener从指定监听器数组中删除一个监听器。需要注意的是,此操作将会改变处于被删监听器之后的那些监听器的索引
- event - 字符串,事件名称
- listener - 处理事件函数
五、EventEmitter的error 事件
EventEmitter 定义了一个特殊的事件 error,它包含了错误的语义,我们在遇到 异常的时候通常会触发 error 事件。
当 error 被触发时,EventEmitter 规定如果没有响 应的监听器,Node.js 会把它当作异常,退出程序并输出错误信息。
我们一般要为会触发 error 事件的对象设置监听器,避免遇到错误后整个程序崩溃。例如:
var events = require('events');
var emitter = new events.EventEmitter();
emitter.emit('error');
六、node介绍
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,可以用于构建高性能的网络应用程序。它采用事件驱动、非阻塞I/O模型,使得程序可以以高效地方式处理并发请求。
Node.js的特点包括:
- 单线程:Node.js采用单线程模型,使用事件循环来处理并发请求。这意味着它可以高效地处理大量的并发请求,而不会因为线程切换而产生开销。
- 非阻塞I/O:Node.js使用非阻塞I/O模型,可以在进行I/O操作时继续处理其他请求,而不需要等待I/O操作完成。这使得Node.js非常适合处理高并发的网络应用程序。
- 异步编程:Node.js采用异步编程模式,可以使用回调函数来处理异步操作的结果。这使得开发者可以编写简洁、可读性强的代码,同时可以更好地利用系统资源。
- 轻量级:Node.js是一个轻量级的运行环境,所需的资源较少,并且可以快速启动。这使得它非常适合部署在云服务器等资源有限的环境中。
- 前后端一体化:Node.js可以用于开发前端和后端的代码,使得前后端可以共享相同的语言和模块。这样可以简化开发流程,并提高开发效率。
Node.js的应用场景包括:
- Web应用程序:Node.js可以用于开发高性能的Web应用程序,如实时聊天应用、实时协作工具等。
- RESTful API服务:Node.js可以用于开发高性能的API服务,提供数据和功能的接口。
- 实时数据应用程序:Node.js可以用于开发实时数据应用程序,如实时数据分析、实时监控等。
- 游戏后台服务器:Node.js可以用于开发游戏后台服务器,处理大量的并发请求。
Node.js是一个功能强大、高性能的JavaScript运行环境,适用于开发各种类型的网络应用程序。它的优势在于高并发处理能力、高效的I/O操作、简洁的异步编程模型,以及与前端一体化等特点。
七、相关链接
- npm版本
- node文档
- node教程
- node历史版本
- node介绍
- node文件系统
- node创建应用