Node.js的事件处理
从windows系统诞生以来,事件驱动成为最普遍的现象。Node.js也是事件驱动的,这看起来是理所当然的事。但Node.js的事件处理在软件架构里提到了一个更高的高度:基于事件驱动的软件架构。
nodejs事件的核心是EventEmitter。很多nodejs对象继承自EventEmitter,用来处理事件,及回调。
var util = require("util"); var events = require("events");//EventEmitter通过events模块来访问 function MyStream() {//新建一个类 events.EventEmitter.call(this); } util.inherits(MyStream, events.EventEmitter);//使这个类继承EventEmitter MyStream.prototype.write = function(data) {//定义一个新方法 this.emit("data", data);//在此触发名为"data"事件 } var stream = new MyStream(); stream.on("data", function(data) {//注册监听器,监听名为"data"事件 console.log('Received data: "' + data + '"'); }) stream.write("It works!"); // Received data: "It works!"
以上的例子说明了EventEmitter的用法。从原理来说,和c#的event实现方法一样的,但使用上有一点不一样:c#的event是通过为类创建一个event属性,燃后对event属性进行事件绑定实现事件驱动,但nodejs是继承EventEmitter实现事件驱动