Nodejs教程-Node.js 事件
在 Node.js 应用程序中,使用事件和回调的概念来提供并发性。因为 Node.js 应用程序是单线程的,并且 Node.js 的所有 API 都是异步的,所以它使用异步函数来保持并发性。Node 使用观察者模式。Node 线程保持一个事件循环,完成任何任务后,会触发相应的事件,从而执行事件监听器函数。
事件驱动编程
Node.js 使用事件驱动编程。这意味着一旦 Node 启动服务器,它只是初始化变量、声明函数,然后等待事件发生。这是 Node.js 相对于其他类似技术非常快的原因之一。
在事件驱动应用程序中,有一个主循环来监听事件,并在检测到其中一个事件时触发回调函数。
事件和回调的区别
尽管事件和回调看起来相似,但区别在于回调函数是在异步函数返回其结果时被调用的,而事件处理是基于观察者模式的。每当事件被触发时,它的监听器函数开始执行。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