nodejs是单线程的,当是它可以通过事件(event)和回调(callback)支持并发编程。由于每个nodejs的API都是异步的,作为单线程,它使用async函数调用来支持并发性。node使用观察者模式。node维护一个事件循环,当一个任务完成时,它启动对应的事件。
事件驱动编程
Nodejs大量使用事件,这是nodejs比较快的一个原因(同其它相似技术比)。当node启动服务时,它执行初始化变量、声明函数,然后简单的等待事件发生。
在事件驱动应用中,通常有一个主循环监听事件,当检测到事件时,触发一个回调函数。
事件的基本使用:
1 2 3 4 |
// 导入event模块 var events = require("events"); // 创建EventEmitter对象 var eventEmitter = new events.EventEmitter(); |
绑定一个event处理函数到一个事件:
1 |
eventEmitter.on('event_name', eventHandleFunction); |
触发事件:
1 |
eventEmitter.emit('event_name') |
示例代码
创建文件main.js,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 导入events模块 var events = require("events"); // 创建EventEmitter对象 var eventEmitter = new events.EventEmitter(); // 创建第一个事件处理函数 var getUrl = function getUrl() { console.log('got url'); // 触发第二个事件 eventEmitter.emit('visitUrl'); } // 绑定第一个事件 eventEmitter.on('getUrl', getUrl); // 绑定第二个事件,使用匿名函数 eventEmitter.on('visitUrl', function() { console.log('visit url'); }); // 触发第一个事件 eventEmitter.emit('getUrl'); |
执行结果:
1 2 3 |
$ node main.js got url visit url |