zoukankan      html  css  js  c++  java
  • NodeJs事件驱动

    today, 我们的话题作文是nodejs,我尝试对它的描述是:似曾相似,但它又不一样的存在着。百花齐放的it世界里,以独特身姿绽放的美丽更容易吸引人。也许只是不了解,也许时间会给出答案,nodejs你值得拥有。

    本篇了解一下nodejs的事件驱动。

    Node.js 事件循环

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

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

    Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。

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

    事件发射器:EventEmitter

    通过 require('events').EventEmitter 获取 EventEmitter 类。

    通过一个列子来看一下EventEmitter类中事件发送以及事件监听的功能封装。

    创建events.js文件:

    var EventEmitter=require("events").EventEmitter;
    var events=new EventEmitter();
    events.on("Click",function(){
        console.log("This Click Event");
    });

    setTimeout(function(){
        events.emit("Click");
    },1000);

    执行脚本:
    E:NodeJS>node events.js
    This Click Event

    emitter.on(event, listener)

    添加一个监听者到特定 event 的监听数组的尾部,触发器不会检查是否已经添加过这个监听者。 多次调用相同的 event listener 将会导致 listener 添加多次。

    比如说往events.js中编写如下内容:

    var EventEmitter=require("events").EventEmitter;
    var events=new EventEmitter();
    events.on("Click",function(){
        console.log("This Click Event 1");
    });
    events.on("Click",function(){
        console.log("This Click Event 2");
    });

    setTimeout(function(){
        events.emit("Click");
    },1000);

    执行脚本:

    E:NodeJS>node events.js
    This Click Event 1
    This Click Event 2
    事件都会被监听,而且会依次执行。

    emitter.addListener(event, listener)或者emitter.once(event, listener)

    给事件添加一个一次性的 listener,这个 listener 只会被触发一次,之后就会被移除。没有监听的事件将一直处于等待状态。

    比如说往events.js中编写如下内容:

    var EventEmitter=require("events").EventEmitter;
    var events=new EventEmitter();
    events.once("Click1",function(){
        console.log("This Click Event 1");
    });
    events.on("Click2",function(){
        console.log("This Click Event 2");
    });
    setInterval(function(){
        events.emit("Click1");
    },1000);
    setInterval(function(){
        events.emit("Click2");
    },1000);

    执行脚本:

    E:NodeJS>node events.js
    This Click Event 1
    This Click Event 2
    This Click Event 2
    once注册的事件只会被监听一次,其后将不会被触发。

    emitter.removeListener(event, listener)

    从一个某个事件的 listener 数组中移除一个 listener。

    比如说往events.js中编写如下内容:

    var EventEmitter=require("events").EventEmitter;
    var events=new EventEmitter();
    var callback1=function(){
        console.log("This Click Event 1");
    }
    var callback2=function(){
        console.log("This Click Event 2");
    }
    events.on("Click",callback1);
    events.on("Click",callback2);
    events.removeListener("Click",callback2);

    setTimeout(function(){
        events.emit("Click");
    },1000);

    执行脚本:

    E:NodeJS>node events.js
    This Click Event 1
    被移出监听的事件其后将不会被触发。removeListener 最多会移除数组里的一个 listener。如果多次添加同一个 listener 到数组,那就需要多次调用removeListener 来移除每一个实例。

    emitter.removeAllListeners([event])

    移出所有监听事件。

    emitter.setMaxListeners(n)

    设置每个监听事件的最大个数。

    EventEmitter.defaultMaxListeners

    设置每个监听事件的默认个数。

    emitter.listeners(event)

    返回事件的 listener 数组。

    emitter.emit(event[, arg1][, arg2][, ...])

    使用指定的参数顺序的执行每一个 listener.

    如果事件有 listener,返回 true, 否则 false

  • 相关阅读:
    Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十五)阶段总结
    [Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~
    OpenCV学习记录之摄像头调用
    很不错的python 机器学习博客
    华清远见Linux设备驱动(每章小结)
    Linux 查看服务器开放的端口号
    MySQL简单优化
    数据探索之数据质量分析
    两张图简说代理服务器和反向代理服务器
    集合类中嵌套定义和引用的举例
  • 原文地址:https://www.cnblogs.com/Francis-YZR/p/5275916.html
Copyright © 2011-2022 走看看