05node.js事件驱动程序

来源:互联网 发布:淘宝上办签证被骗了 编辑:程序博客网 时间:2024/06/06 01:33
10月6号号学习:今天你在哪一步?
node.js事件循环
1:线程和进程区别
看日志:
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
2:node.js的线程特点:
<1>node.js是单线程应用程序,但是通过事件和回调支持并发,性能非常高;
<2>node.js的每个api都是异步的,并作为一个独立线程运行,使用异步函数调用、处理;
<3>node.js基本上所有的事件机制都是用设计模式中观察者模式实现
<4>node.js单线程类似进入一个while的时间循环,直到没有事件观察者退出,
每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数。
3:事件驱动程序:
node.js使用事件驱动程序,当webserver接收到请求,就把它关闭然后进行处理,
然后去服务下一个web请求。当这个请求完成,他被放回处理队列,当到达队列开头,
这个结果被返回给用户。
这个模型的可扩展行非常强,因为webserver一直接收请求而不等待任何读写操作。
(这也被称之为非阻塞式IO或者事件驱动IO);
4:代码实现:
node.js有多个内置的事件,我们可以通过引入event模块,并通过实例化EventEmitter类来
绑定和监听事件。
//引入events模块
var events = require('events');
//创建eventEmitter对象
var eventEmitter = new events.EventEmitter();


//绑定事件以及事件的处理程序
eventEmitter.on('eventName',eventHandler);
//可以通过程序触发事件
eventEmitter.emit('eventName');


实例:
// 引入 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("程序执行完毕。");
5:node应用程序工作方式
在node应用程序中,执行异步操作的函数将回调函数作为最后一个参数,
回调函数接受错误对象作为第一个参数。


例如:
var fs = require('fs');
fs.readFile('input.txt',function(err,data){
if(err){
console.log(err.stack);
return;
}
console.log(data.toString());
})
console.log('程序执行完毕');
0 0
原创粉丝点击