NodeJS - 事件循环

Node.js是一个单线程应用程序,但它可以通过事件和回调的概念来支持并发。Node.js的每个API都是异步的并且是单线程的,它们使用异步函数调用来保持并发性。NodeJS使用观察者模式。NodeJS线程保持一个事件循环,每当一个任务完成时,它就会触发相应的事件,这个事件指示事件监听器函数执行。


事件驱动的编程

Node.js大量使用事件,这也是Node.js与其他类似技术相比相当快的原因之一。只要Node启动它的服务器,它就会启动它的变量,声明函数,然后等待事件发生。

在事件驱动的应用程序中,通常有一个主循环监听事件,然后在检测到其中一个事件时触发回调函数。
事件驱动
尽管事件看起来与回调非常相似,但区别在于回调函数在异步函数返回结果时被调用,而事件处理在观察者模式下工作。听事件的功能就像观察者一样。每当事件被触发时,其侦听器函数就开始执行。Node.js具有多个可用于通过事件模块和EventEmitter类的内置事件,这些类用于绑定事件和事件侦听器,如下所示

// Import events module
var events = require('events');

// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

下面是将事件处理程序与事件绑定

// Bind event and   eventHandler as follows
eventEmitter.on('eventName', eventHandler);

然后我们触发事件

// Fire an event 
eventEmitter.emit('eventName');

以下是一个完整的例子 hello.js:

// Import events module
var events = require('events');


// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

// Create an eventHandler as follows
var connectHandler = function connected() {
   console.log('connection succesful.');

   // Fire the data_received event 
   eventEmitter.emit('data_received');
}

// Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);

// Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function(){
   console.log('data received succesfully.');
});

// Fire the connection event 
eventEmitter.emit('connection');

console.log("Program Ended.");

运行结果如下:
运行结果

猜你喜欢

转载自blog.csdn.net/tian_123456789/article/details/79658624