zoukankan      html  css  js  c++  java
  • NodeJS 事件循环

    Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。

    Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。

    Node.js 基本上所有的事件机制都是用设计模式中观察者模式(发布-订阅)实现。

    Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.

    var events = require('events');
    var eventEmitter = new events.EventEmitter();
    
    
    //创建处理程序
    var onFire = function() {
        console.log('点火');
    
        //触发放油
        eventEmitter.emit('pour_oil');
    };
    eventEmitter.on('fire', onFire);
    
    var oil = function() {
        console.log('往锅里倒油');
    }
    
    eventEmitter.on('pour_oil', oil);
    
    eventEmitter.emit('fire');
    
    console.log('程序结束');

    EventEmitter 提供了多个属性,如 on 和 emiton 函数用于绑定事件函数,emit 属性用于触发一个事件。接下来我们来具体看下 EventEmitter 的属性介绍。

    var events = require('events');
    var eventEmitter = new events.EventEmitter();
    
    
    //创建处理程序
    var onFire = function() {
        console.log('点火');
    
        //触发放油
        eventEmitter.emit('pour_oil');
    };
    eventEmitter.on('fire', onFire);
    
    var oil = function() {
        console.log('往锅里倒油');
    }
    
    eventEmitter.on('pour_oil', oil);
    
    var listen1;
    //添加监听器
    eventEmitter.addListener('fire', listen1 = function() {
    
        console.log('fire1');
    });
    eventEmitter.addListener('fire', function() {
    
        console.log('fire2');
    });
    //统计fire事件上有多少个监听器
    var count = require('events').EventEmitter.listenerCount(eventEmitter, 'fire');
    console.log("fire上有 " + count + " 个事件监听器。");
    
    //移除监听器
    eventEmitter.removeListener('fire', listen1);
    console.log('listen1 已经被移除');
    
    
    //统计fire事件上有多少个监听器
    var count = require('events').EventEmitter.listenerCount(eventEmitter, 'fire');
    console.log("fire上有 " + count + " 个事件监听器。");
    
    console.log('程序结束');

  • 相关阅读:
    Netty事件监听和处理(上)
    Netty事件监听和处理(上)
    Netty事件监听和处理(上)
    nginx 反向代理转发导致css,js,图片失效
    nginx 反向代理转发导致css,js,图片失效
    nginx 反向代理转发导致css,js,图片失效
    【leetcode】507.Perfect Number
    【leetcode】507.Perfect Number
    【leetcode】507.Perfect Number
    Javascript中的类实现
  • 原文地址:https://www.cnblogs.com/meiyh/p/6542745.html
Copyright © 2011-2022 走看看