美文网首页
三:事件驱动以及循环

三:事件驱动以及循环

作者: 谢玉胜 | 来源:发表于2018-06-08 10:25 被阅读0次

    单进程+单线程

    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 不会打乱对象原有的继承关系。

    相关文章

      网友评论

          本文标题:三:事件驱动以及循环

          本文链接:https://www.haomeiwen.com/subject/uxvosftx.html