1. 程式人生 > >Node.js學習隨筆三,事件event

Node.js學習隨筆三,事件event

Node.js 是單程序單執行緒應用程式,但是因為 V8 引擎提供的非同步執行回撥介面,通過這些介面可以處理大量的併發,所以效能非常高。

Node.js 幾乎每一個 API 都是支援回撥函式的。

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

Node.js 單執行緒類似進入一個while(true)的事件迴圈,直到沒有事件觀察者退出,每個非同步事件都生成一個事件觀察者,如果有事件發生就呼叫該回調函式。

Node.js 所有的非同步 I/O 操作在完成時都會發送一個事件到事件佇列。

Node.js 裡面的許多物件都會分發事件:一個 net.Server 物件會在每次有新連線時觸發一個事件, 一個 fs.readStream 物件會在檔案被開啟的時候觸發一個事件。 所有這些產生事件的物件都是 events.EventEmitter 的例項。

EventEmitter 類

events 模組只提供了一個物件: events.EventEmitter。EventEmitter 的核心就是事件觸發與事件監聽器功能的封裝。

例項1

執行結果

 

EventEmitter 的每個事件由一個事件名和若干個引數組成,事件名是一個字串,通常表達一定的語義。對於每個事件,EventEmitter 支援 若干個事件監聽器。

當事件觸發時,註冊到這個事件的事件監聽器被依次呼叫,事件引數作為回撥函式引數傳遞。

 例項2

執行結果

 

嘗試新增和移除事件

結果

 

總結一下,eventEmitter用on註冊(繫結)事件函式,用emit觸發事件,有多個事件函式時,依次呼叫,也可以刪除事件。

參考文章

http://www.runoob.com/nodejs/nodejs-event-loop.html

http://www.runoob.com/nodejs/nodejs-event.html