【Node系列】EventEmitter详解

2024-02-02 23:52

本文主要是介绍【Node系列】EventEmitter详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、EventEmitter介绍
  • 二、EventEmitter方法
  • 三、EventEmitter类方法
  • 四、EventEmitter事件
  • 五、EventEmitter的error 事件
  • 六、node介绍
  • 七、相关链接

一、EventEmitter介绍

Node.js 的 EventEmitter 是一个核心模块,用于处理事件驱动的编程。它提供了一个事件发射器类,可以在其上注册事件监听器,并在特定事件发生时触发这些监听器。

下面是 EventEmitter 的主要概念和用法:

  1. 事件:事件是由 EventEmitter 类表示的字符串或数字。你可以在任何时候触发这些事件。
  2. 监听器:监听器是一个函数,当特定事件被触发时,它将被调用。你可以使用 on 方法添加监听器到特定事件。
  3. 触发事件:使用 emit 方法可以触发一个事件,所有注册到该事件的监听器都将被调用。
  4. 移除监听器:如果你不再需要一个监听器,可以使用 off 方法将其从事件中移除。
  5. 一次性监听器:使用 once 方法可以添加一个只触发一次的监听器。
  6. 错误事件: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方法

  1. addListener(event, listener)为指定事件添加一个监听器到监听器数组的尾部。
  2. on(event, listener)为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。
server.on('connection', function (stream) {console.log('someone connected!');
});
  1. once(event, listener)为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。
server.once('connection', function (stream) {console.log('Ah, we have our first user!');
});
  1. removeListener(event, listener)移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。

它接受两个参数,第一个是事件名称,第二个是回调函数名称。

var callback = function(stream) {console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
  1. removeAllListeners([event])移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。
  2. setMaxListeners(n)默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于改变监听器的默认限制的数量。
  3. listeners(event)返回指定事件的监听器数组。
  4. emit(event, [arg1], [arg2], […])按监听器的顺序执行执行每个监听器,如果事件有注册监听返回 true,否则返回 false。

三、EventEmitter类方法

listenerCount(emitter, event)返回指定事件的监听器数量。

events.EventEmitter.listenerCount(emitter, eventName) //已废弃,不推荐
events.emitter.listenerCount(eventName) //推荐

四、EventEmitter事件

  1. newListener该事件在添加新监听器时被触发。
  • event - 字符串,事件名称
  • listener - 处理事件函数
  1. 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的特点包括:

  1. 单线程:Node.js采用单线程模型,使用事件循环来处理并发请求。这意味着它可以高效地处理大量的并发请求,而不会因为线程切换而产生开销。
  2. 非阻塞I/O:Node.js使用非阻塞I/O模型,可以在进行I/O操作时继续处理其他请求,而不需要等待I/O操作完成。这使得Node.js非常适合处理高并发的网络应用程序。
  3. 异步编程:Node.js采用异步编程模式,可以使用回调函数来处理异步操作的结果。这使得开发者可以编写简洁、可读性强的代码,同时可以更好地利用系统资源。
  4. 轻量级:Node.js是一个轻量级的运行环境,所需的资源较少,并且可以快速启动。这使得它非常适合部署在云服务器等资源有限的环境中。
  5. 前后端一体化:Node.js可以用于开发前端和后端的代码,使得前后端可以共享相同的语言和模块。这样可以简化开发流程,并提高开发效率。

Node.js的应用场景包括:

  1. Web应用程序:Node.js可以用于开发高性能的Web应用程序,如实时聊天应用、实时协作工具等。
  2. RESTful API服务:Node.js可以用于开发高性能的API服务,提供数据和功能的接口。
  3. 实时数据应用程序:Node.js可以用于开发实时数据应用程序,如实时数据分析、实时监控等。
  4. 游戏后台服务器:Node.js可以用于开发游戏后台服务器,处理大量的并发请求。

Node.js是一个功能强大、高性能的JavaScript运行环境,适用于开发各种类型的网络应用程序。它的优势在于高并发处理能力、高效的I/O操作、简洁的异步编程模型,以及与前端一体化等特点。

七、相关链接

  1. npm版本
  2. node文档
  3. node教程
  4. node历史版本
  5. node介绍
  6. node文件系统
  7. node创建应用

这篇关于【Node系列】EventEmitter详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/672399

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

详解python pycharm与cmd中制表符不一样

《详解pythonpycharm与cmd中制表符不一样》本文主要介绍了pythonpycharm与cmd中制表符不一样,这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽... 这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽度不同导致的。在PyChar