NodeJs事件驅動

today, 咱們的話題做文是nodejs,我嘗試對它的描述是:似曾類似,但它又不同的存在着。百花齊放的it世界裏,以獨特身姿綻開的美麗更容易吸引人。也許只是不瞭解,也許時間會給出答案,nodejs你值得擁有。node

本篇瞭解一下nodejs的事件驅動。設計模式

Node.js 事件循環數組

Node.js 是單進程單線程應用程序,可是經過事件和回調支持併發,因此性能很是高。併發

Node.js 的每個 API 都是異步的,並做爲一個獨立線程運行,使用異步函數調用,並處理併發。異步

Node.js 基本上全部的事件機制都是用設計模式中觀察者模式實現。函數

Node.js 單線程相似進入一個while(true)的事件循環,直到沒有事件觀察者退出,每一個異步事件都生成一個事件觀察者,若是有事件發生就調用該回調函數.性能

事件發射器:EventEmitterui

經過 require('events').EventEmitter 獲取 EventEmitter 類。spa

經過一個列子來看一下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

相關文章
相關標籤/搜索