浅谈node的事件机制

浅谈 Node 的事件机制

1. Node.js 事件机制简介

Node.js 的事件机制是基于观察者模式实现的,包含两个主要部分:事件的触发器(EventEmitter)和事件的监听器(Listener)。

其中 EventEmitter 是具有发布-订阅(publish-subscribe)模式功能的对象,用来触发事件和传递数据,而 Listener 则是负责监听事件的处理函数。在 Node.js 中,事件机制被广泛应用于各个模块之间的通信,以及处理异步操作的回调函数。

2. EventEmitter 类的常用API

在 Node.js 中,EventEmitter 类的常用 API 如下:

  • eventEmitter.on(eventName, listener):为指定事件注册一个监听器,该监听器会在事件被触发时被调用。eventName为事件名称,listener为处理函数。
  • eventEmitter.emit(eventName[, arg1][, arg2][, ...]):触发指定事件,并将参数传递给处理函数。
  • eventEmitter.once(eventName, listener):为指定事件注册一个单次监听器,该监听器会在第一次事件被触发时,被调用后自动被移除。
  • eventEmitter.removeListener(eventName, listener):停止监听指定事件。
  • eventEmitter.removeAllListeners([eventName]):移除所有或指定事件的所有监听器。
  • eventEmitter.listeners(eventName):返回指定事件的监听器数组。

3. 示例

示例 1:服务器响应请求

以下示例演示了如何基于 Node.js EventEmiiter 类实现一个简单的服务器,并响应 HTTP 请求:

const http = require('http');
const EventEmitter = require('events');

const server = http.createServer();
const eventEmitter = new EventEmitter();

eventEmitter.on('request', (req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World!');
  res.end();
});

server.on('request', (req, res) => {
  eventEmitter.emit('request', req, res);
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

在此示例中,我们创建了一个 http 服务器,并创建了一个名为 eventEmitter 的 EventEmitter 实例,使用 eventEmitter 对象的 on 方法为 request 事件添加了一个处理函数,然后在服务器对象上添加了一个 request 事件,当触发这个事件时,我们通过 eventEmitter 对象来调用响应的处理函数。

示例 2:自定义事件

以下示例演示了如何自定义事件,并通过异步操作触发和监听事件:

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

myEmitter.on('event', (a, b) => {
  console.log(a, b, this);
});

setTimeout(() => {
  myEmitter.emit('event', 'Hello', 'World');
}, 1000);

在此示例中,我们定义了 MyEmitter 类,该类继承了 EventEmitter,然后我们实例化了 myEmitter 对象并为 event 事件添加了一个处理函数,该处理函数会在事件被触发时被调用,并将参数 ab 打印到控制台上。然后我们使用 setTimeout 函数来延迟 1 秒触发事件,并传递 'Hello' 和 'World' 作为参数。

4. 总结

Node.js 事件机制是其异步编程的核心之一,其中 EventEmitter 类是事件驱动架构的核心实现。熟悉 Node.js 的事件机制可以帮助开发者更好地处理异步任务,提升应用程序的性能和稳定性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈node的事件机制 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • JavaScript 用Node.js写Shell脚本[译]

    让我来详细讲解“JavaScript 用Node.js写Shell脚本[译]”的完整攻略。 什么是 Shell 脚本? Shell 脚本是一种运行在 Unix/Linux 系统上的脚本,用于自动执行一系列的命令或操作。通常用 Shell 脚本来完成常规的任务,如备份数据、自动部署应用程序等。 Shell 脚本通常是使用 Shell 编程语言编写的。Shell…

    node js 2023年6月8日
    00
  • 通过实例了解Nodejs模块系统及require机制

    让我来详细讲解“通过实例了解Nodejs模块系统及require机制”的完整攻略。我会通过两个示例来说明。 一、Node.js 模块系统 在 Node.js 中,模块是一个具有封装性和复用性的单位,它将包含 JavaScript 函数或对象的单个文件定义为独立的模块。这里我们通过一个实例来了解 Node.js 的模块系统。 首先,创建一个名为 math.js…

    node js 2023年6月8日
    00
  • Node.js中,在cmd界面,进入退出Node.js运行环境的方法

    以下是进入和退出 Node.js 运行环境的方法: 进入 Node.js 运行环境 打开命令提示符窗口(Windows系统按Win + R,输入cmd,回车即可),输入 node 或 node -i 命令并回车,即可进入 Node.js 运行环境。 示例1: C:\>node Welcome to Node.js v14.16.0. Type &quo…

    node js 2023年6月8日
    00
  • 基于Nodejs的Tcp封包和解包的理解

    下面我将为您详细讲解“基于Nodejs的Tcp封包和解包的理解”的完整攻略。 1. 什么是TCP封包和解包 在网络传输中,常使用TCP协议进行数据传输。但是,传输的数据都是以二进制编码的形式进行传输的,所以我们需要进行TCP封包和解包以便正确的处理传输数据。 TCP封包:TCP封包是指将数据按照TCP协议的规定打包成一个个二进制数据包。每个TCP数据包包括T…

    node js 2023年6月8日
    00
  • 利用node 判断打开的是文件 还是 文件夹的实例

    要利用 Node.js 判断打开的是文件还是文件夹,可以使用 Node.js 核心模块 fs (file system) 模块中的 statSync() 方法。 statSync() 方法可以返回该文件或文件夹的状态,通过它的 isFile() 和 isDirectory() 方法,可以判断是文件还是文件夹。 以下是示例: 1. 判断文件是否存在 const…

    node js 2023年6月8日
    00
  • 用node.js写一个jenkins发版脚本

    下面我来详细讲解“用node.js写一个jenkins发版脚本”的完整攻略。 1. 环境准备 在开始编写jenkins发版脚本之前,我们需要安装好node.js和jenkins。以下是安装步骤。 安装node.js 访问node.js官网,下载对应系统的安装包。 安装node.js。安装过程中按照默认设置一步步进行即可。 安装jenkins 访问官网,下载对…

    node js 2023年6月8日
    00
  • 详解在vue-cli项目中安装node-sass

    安装node-sass是为了在vue-cli项目中使用sass预处理器。 以下是在vue-cli项目中安装node-sass的完整攻略: 1. 安装node-sass 在终端中执行以下命令: npm install node-sass –save-dev 这将在项目的package.json中添加node-sass的依赖。 2. 修改配置文件 在项目的根目…

    node js 2023年6月8日
    00
  • 深入nodejs中流(stream)的理解

    理解 Node.js 中的流(stream)非常重要,因为在处理大量数据或网络流时,流是一种高效而可靠的方式。本文将深入介绍 Node.js 中的流概念和使用方法,包括流的类型、创建和使用流、以及流的事件和操作。 流的类型 在 Node.js 中,流可以分为四类: 可读流(Readable Stream):从源头读取数据。 可写流(Writable Stre…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部