node --事件循环

node.js中基本上全部的事件机制都是采用观察者模式实现。
node.js单线程相似进入一个while(true)的事件循环,直到没有事件观察者退出,每一个异步事件都生成一个事件观察者,若是有事件发生就调用该回调函数。node

node.js事件驱动流程
node.js使用事件驱动模型,当web server接收到请求,就把它关闭而后转给子线程处理业务,主线程去服务下一个web请求。
当子线程完成此次请求的业务,它会被放到一个队列中,当它到了队列的出口,就会触发回调函数,将这个结果返回给用户。
在这个事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。
事件的驱动流程比较像 观察者模式,事件至关于一个主题(Subject),全部注册到这个事件上的处理函数至关于观察者(Observer)。
以下是node.js的事件实例web

//载入 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('程序执行完毕');

执行结果异步

输入图片说明
上述代码执行流程
1>eventEmitter.emit('connection'),触发id = 'connection'对应的事件
2>'connection'绑定的事件是connectHandler
3>connectHandler是方法function connected()返回的结果,因此进去该方法
4>打印出'链接成功'
5>触发id='data_received'对应的事件
6>'data_received'对应的是方法function()
7>该方法执行 打印出'数据接收成功'
8>事件部分处理完毕,执行最后'程序处理完毕'函数