在 Node.js 应用程序中,使用事件和回调的概念来提供并发性。因为 Node.js 应用程序是单线程的,并且 Node.js 的所有 API 都是异步的,所以它使用异步函数来保持并发性。Node 使用观察者模式。Node 线程保持一个事件循环,完成任何任务后,会触发相应的事件,从而执行事件监听器函数。

事件驱动编程

Node.js 使用事件驱动编程。这意味着一旦 Node 启动服务器,它只是初始化变量、声明函数,然后等待事件发生。这是 Node.js 相对于其他类似技术非常快的原因之一。

在事件驱动应用程序中,有一个主循环来监听事件,并在检测到其中一个事件时触发回调函数。

1.png

事件和回调的区别

尽管事件和回调看起来相似,但区别在于回调函数是在异步函数返回其结果时被调用的,而事件处理是基于观察者模式的。每当事件被触发时,它的监听器函数开始执行。Node.js 有多个内置事件,可通过 events 模块和 EventEmitter 类绑定事件和事件监听器。

使用 EventEmitter 类绑定事件和事件监听器:

// 导入 events 模块
var events = require('events');
// 创建 EventEmitter 对象
var eventEmitter = new events.EventEmitter();

绑定事件处理程序到事件:

// 绑定事件和事件处理程序
eventEmitter.on('eventName', eventHandler);

触发事件:

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

Node.js 事件示例

文件: main.js

// 导入 events 模块
var events = require('events');
// 创建 EventEmitter 对象
var eventEmitter = new events.EventEmitter();

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

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

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

// 将 data_received 事件与匿名函数绑定
eventEmitter.on('data_received', function(){
  console.log('数据接收成功。');
});

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

console.log("程序结束。");

现在,打开 Node.js 命令提示符并运行以下代码:

node main.js

2.png

标签: Nodejs, Nodejs安装教程, Nodejs教程, node, nodejs入门, nodejs入门教程, nodejs进阶, nodejs学习教程, nodejs开发, nodejs指南, nodejs学习指南, nodejs环境配置, nodejs框架