三:事件驱动以及循环

单进程+单线程

Node是单进程单线程的程序,V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。

事件驱动

Node是以事件驱动的程序,所谓事件驱动,指的是我们在前端使用http请求后,在后端的所设置的监听响应

事件循环

当并发很多的事件的时候,会产生这样的事件循环模型

当web server接收到请求->就把它关闭然后进行处理,然后去服务下一个web请求。
->当这个请求完成->它被放回处理队列->当到达队列开头->这个结果被返回给用户。

main.js

// 引入 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("程序执行完毕。");

执行后!
$ node main.js
连接成功。
数据接收成功。
程序执行完毕。

继承 EventEmitter

大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。
为什么要这样做呢?原因有两点:
首先,具有某个实体功能的对象实现事件符合语义, 事件的监听和发生应该是一个对象的方法。
其次 JavaScript 的对象机制是基于原型的,支持 部分多重继承,继承 EventEmitter 不会打乱对象原有的继承关系。

你可能感兴趣的:(三:事件驱动以及循环)