setTimeout

简介: 【10月更文挑战第22天】

Node.js 的事件循环是其非阻塞 I/O 模型的核心,它允许 Node.js 在单线程上处理大量并发操作。事件循环不断地检查事件队列,处理事件,执行回调函数,并且是异步编程的基础。

Node.js 中的事件循环大致分为以下几个阶段:
image.png

  1. 定时器(Timers):检查并执行 setTimeout 和 setInterval 的回调。
  2. I/O 事件(I/O Events):包括网络请求、文件系统操作等,处理非阻塞的 I/O 事件。
  3. 立即执行回调(Immediate Callbacks):通过 process.nextTick() 和 setImmediate() 调度的回调函数。
  4. 关闭的回调函数(Close Callbacks):如 socket.on('close', ...) 等,处理一些资源的清理工作。

下面是一个简单的 Node.js 事件驱动程序的示例,它展示了如何使用 events 模块中的 EventEmitter 类来创建自定义事件和监听器:

// 引入 events 模块
var events = require('events');

// 创建一个 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

// 定义一个事件处理程序
var connectHandler = function connected() {
   
  console.log('连接成功。');

  // 在连接成功后触发 'data_received' 事件
  eventEmitter.emit('data_received');
};

// 绑定 'connection' 事件到 connectHandler 处理程序
eventEmitter.on('connection', connectHandler);

// 定义另一个事件处理程序,用于处理 'data_received' 事件
eventEmitter.on('data_received', function() {
   
  console.log('数据接收成功。');
});

// 触发 'connection' 事件
eventEmitter.emit('connection');

console.log("程序执行完毕。");

在这个例子中,我们首先引入了 events 模块,并创建了一个 EventEmitter 对象。然后我们定义了一个名为 connectHandler 的函数,它会在触发 'connection' 事件时被调用,并打印 "连接成功。" 到控制台。在 connectHandler 函数内部,我们又触发了另一个名为 'data_received' 的事件。

目录
相关文章
|
移动开发 安全 前端开发
优化 uniapp 发行操作:一键打包、混淆代码
优化 uniapp 发行操作:一键打包、混淆代码
540 0
|
弹性计算 网络协议 数据处理
稳定平滑进行云上业务IPv6化改造—— Series1:改造思路及CDN改造
随着国家工信部印发的《推进IPv6规模部署行动计划》的深入推进,近期国资委相关的大型国企都开始着手进行业务的IPv6化改造,其在阿里云上的门户及B2B、B2C等对外业务,自然进入第一批改造的范围。本文是基于在具体客户的IPv6化过程中积累的最佳实践编写,希望能够给读者带来一些IPv6化改造的启发。
稳定平滑进行云上业务IPv6化改造—— Series1:改造思路及CDN改造
|
7月前
|
SQL NoSQL Oracle
关系型与非关系型数据库的区别
关系型数据库是依据关系模型来创建的数据库,所谓关系模型就是“一对一”、“一对多”、“对多对”等。常见的关系型数据库有Oracle、MySQL、SQL Server等。非关系型数据库主要基于“非关系型模型”,其中非关系型模型有:列模型、键值对模型、文档类模型。比如redis属于键值对模型。 MongoDB属于文档模型 关系型数据库的优点: ● 易于维护:都是使用表结构,格式一致。 ● 使用方便:SQL语言通用,可用于复杂查询。 ● 复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。 关系型数据库的缺点: ● 读写性能比较差,尤其是海量数据的高效率读写。 ● 固定的表结构,灵活
|
11月前
|
人工智能 大数据 云计算
【AI系统】AI 发展驱动力
本文介绍了阿里云在2023年云栖大会上发布的多项新技术和产品,涵盖云计算、大数据、人工智能等领域,展示了阿里云最新的技术成果和行业解决方案,助力企业数字化转型。
|
SQL 关系型数据库 MySQL
MySQL操作利器——mysql-connector-python库详解
MySQL操作利器——mysql-connector-python库详解
2260 0
|
7月前
|
人工智能 自然语言处理 JavaScript
鸿蒙 Next 对接 AI API 实现文字对话功能指南
本指南介绍如何在鸿蒙 Next 系统中对接 AI API,实现文字对话功能。首先通过 DevEco Studio 创建项目并配置网络权限,选择合适的 AI 服务(如华为云或百度文心一言)。接着,使用 Node.js 转发请求,完成客户端与服务器端代码编写。最后进行功能测试与优化,确保多轮对话顺畅、性能稳定。此过程需严格遵循开发规范,充分利用系统资源,为用户提供智能化交互体验。
340 0
|
存储 数据库 Android开发
安卓Jetpack Compose+Kotlin,支持从本地添加音频文件到播放列表,支持删除,使用ExoPlayer播放音乐
为了在UI界面添加用于添加和删除本地音乐文件的按钮,以及相关的播放功能,你需要实现以下几个步骤: 1. **集成用户选择本地音乐**:允许用户从设备中选择音乐文件。 2. **创建UI按钮**:在界面中创建添加和删除按钮。 3. **数据库功能**:使用Room数据库来存储音频文件信息。 4. **更新ViewModel**:处理添加、删除和播放音频文件的逻辑。 5. **UI实现**:在UI层支持添加、删除音乐以及播放功能。
|
存储 NoSQL 关系型数据库
面试题14: 关系型数据库和非关系型数据库的区别
面试题14: 关系型数据库和非关系型数据库的区别
447 1
|
前端开发 JavaScript
Node.js 事件循环:定时任务、延迟任务和 I/O 事件的艺术
Node.js 事件循环:定时任务、延迟任务和 I/O 事件的艺术
Node.js 事件循环:定时任务、延迟任务和 I/O 事件的艺术
|
自然语言处理 Java 索引
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
680 1