node.js架构之 事件模型

众所周知,node.js架构采用的是异步,事件模式机制,来提高服务器性能,那么你了解node.js的事件模式是怎么去设计的吗? 接下来将带你初步了解node.js事件机制和在你的程序中编写事件:

首先应该先了解EventEmitter模型。它可以发送一个事件以及让消费者订阅感兴趣的事件。我们可以把它看成是向一个异步函数进行回调传递模式的扩展。特别是,当需要进行多次回调时,EventEmitter会更显优势。
例如,有一个调用者向远程服务器发送了一个“列出文件”的请求。你可能想对返回结果进行分组,对每一个分组进行一次回调处理。EventEmitter模型可以让你在每一个分组上发送“文件”回调,当全部操作完成时进行“结束”处理。
使用EventEmitter时,只需设置好相关事件和参数。
var EventEmitter = require('events').EventEmitter;    
var util = require('util');    
function MyClass() {    
  if (!(this instanceof MyClass)) return new MyClass();    
  EventEmitter.call(this);     
  var self = this;    
  setTimeout(function timeoutCb() {    
    self.emit('myEvent', 'hello world', 42);    
  }, 1000);    
}    
util.inherits(MyClass, EventEmitter);   

MyClass构造函数创建了一个时间触发器,触发延时为1s,触发事件为myEvent。要使用相关事件,需要执行on()方法:
var myObj = new MyClass();    
var start = Date.now();    
myObj.on('myEvent', function myEventCb(str, num) {    
  console.log('myEvent triggered', str, num, Date.now() - start);    
}); 
  
这里要注意的是,订阅的EventEmitter事件虽然是异步事件,但当时间触发时,监听方的动作是会同步的。因此如果上述myEvent事件有10个监听者,所有的监听会被按次序调用而不用等候事件的循环。
如果EventEmitter的一个子类生成了一个emit(‘error’)事件,但是无任何的监听方对此进行订阅,那么EventEmitter基类会抛出一个异常,从而导致当执行process对象时触发uncaughtException事件。

好了,通过上面的对事件机制的理解及代码实例,你已经学会了如何在node.js中去写一个我们自己的事件,已经如果去捕获相关事件去处理逻辑

你可能感兴趣的:(node.js)