成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

聊聊Node.js中的事件驅動程序和EventEmitter類

本篇文章帶大家了解一下Node中的事件,聊聊一下事件驅動程序和EventEmitter 類,希望對大家有所幫助!

聊聊Node.js中的事件驅動程序和EventEmitter類

Nodejs 是單進程單線程應用程序,但是因為 V8 引擎提供的異步執行回調接口,通過這些接口可以處理大量的并發,所以性能非常高。

Node.js 幾乎每一個 API 都是支持回調函數的。

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

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


事件驅動程序

Node.js 使用事件驅動模型,當web server接收到請求,就把它關閉然后進行處理,然后去服務下一個web請求。

當這個請求完成,它被放回處理隊列,當到達隊列開頭,這個結果被返回給用戶。

這個模型非常高效可擴展性非常強,因為 webserver 一直接受請求而不等待任何讀寫操作。(這也稱之為非阻塞式IO或者事件驅動IO)

在事件驅動模型中,會生成一個主循環來監聽事件,當檢測到事件時觸發回調函數。

Node.js 有多個內置的事件,我們可以通過引入 events 模塊,并通過實例化 EventEmitter 類來綁定和監聽事件,如下實例:

// 引入 events 模塊 var events = require('events'); // 創建 eventEmitter 對象 var eventEmitter = new events.EventEmitter();

以下程序綁定事件處理程序:

// 綁定事件及事件的處理程序 eventEmitter.on('eventName', eventHandler);

我們可以通過程序觸發事件:

// 觸發事件 eventEmitter.emit('eventName');

實例

創建 index.js 文件,代碼如下所示:

//引入 fs 模塊 var fs = require("fs");  // 引入 events 模塊 var events = require('events');  // 創建對象 var ee = new events.EventEmitter();  // 綁定事件及事件的處理程序 ee.on('res', function (data) {     console.log('res-1');     console.log(data); }); ee.on('res', function () {     console.log('res-2'); });  fs.readFile('hello.txt',{flag:'r',encoding:'utf-8'},function(err,data){     if(err){         console.log("讀取出錯:"+err);     }else{         console.log("讀取成功:"+data);         // 觸發res事件         ee.emit('res',data);     } })

接下來讓我們執行以上代碼:

聊聊Node.js中的事件驅動程序和EventEmitter類

EventEmitter 類

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

你可以通過require("events");來訪問該模塊。

// 引入 events 模塊 var events = require('events'); // 創建 eventEmitter 對象 var eventEmitter = new events.EventEmitter();

EventEmitter 對象如果在實例化時發生錯誤,會觸發 error 事件。當添加新的監聽器時,newListener 事件會觸發,當監聽器被移除時,removeListener 事件被觸發。

下面我們用一個簡單的例子說明 EventEmitter 的用法:

//event.js 文件 var EventEmitter = require('events').EventEmitter;  var event = new EventEmitter();  event.on('some_event', function() {      console.log('some_event 事件觸發');  });  setTimeout(function() {      event.emit('some_event');  }, 1000);

執行結果如下:

運行這段代碼,1 秒后控制臺輸出了 'some_event 事件觸發' 。其原理是 event 對象注冊了事件 some_event 的一個監聽器,然后我們通過 setTimeout 在 1000 毫秒以后向 event 對象發送事件 some_event,此時會調用some_event 的監聽器。

$ node event.js  some_event 事件觸發

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

當事件觸發時,注冊到這個事件的事件監聽器被依次調用,事件參數作為回調函數參數傳遞。

讓我們以下面的例子解釋這個過程:

//event.js 文件 var events = require('events');  var emitter = new events.EventEmitter();  emitter.on('someEvent', function(arg1, arg2) {      console.log('listener1', arg1, arg2);  });  emitter.on('someEvent', function(arg1, arg2) {      console.log('listener2', arg1, arg2);  });  emitter.emit('someEvent', 'arg1 參數', 'arg2 參數');

執行以上代碼,運行的結果如下:

$ node event.js  listener1 arg1 參數 arg2 參數 listener2 arg1 參數 arg2 參數

以上例子中,emitter 為事件 someEvent 注冊了兩個事件監聽器,然后觸發了 someEvent 事件。

運行結果中可以看到兩個事件監聽器回調函數被先后調用。 這就是EventEmitter最簡單的用法。

EventEmitter 提供了多個屬性,如 onemiton 函數用于綁定事件函數,emit 屬性用于觸發一個事件。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
无码国产成人午夜电影在线观看| 色婷婷综合中文久久一本| 国产一区在线观看二区| 午夜A级理论片在线播放琪琪| 欧美精产国品一二三产品区别| 娇小性XXXX摘花HD| 国产成人亚洲综合无码8| AV无码人妻中文字幕| 亚洲中文字幕AV不卡无码| 性丰满ⅩXXOOOZZXXHD| 少妇泬出白浆18P试看| 欧美亚洲综合另类色妞网| 久久青青草原精品国产| 狠狠色噜噜狠狠狠777米奇 | 色一情一乱一伦麻豆| 女人被第一次18毛片| 久久久久夜色精品国产| 黄网站色视频免费观看| 国产日韩精品一区二区三区在线观| 顶级大但人文艺术巫| 宝贝腿开大一点你真湿H| 99久久久无码国产精品性 | 无码AV中文字幕出轨人妻 | 99精产国品一二三产区| 中文乱码人妻系列一区二区 | 蜜桃女同一区二区免费AV哟| 久久AⅤ免费观看| 娇妻当着我的面被4P| 麻花传媒68XXX在线观看| 久久国语露脸国产精品电影| 激情内射亚洲一区二区三区 | 办公室少妇愉情理伦片| 国产啪精品视频网站免费| 邻居少妇人妻HD高清大乳在线 | 亚洲人交乣女BBW| 亚洲开心婷婷中文字幕| 亚洲AV无码一区二区三区波多野| 无套中出丰满人妻无码| 一出一进一爽一粗一大视频| 亚洲中文字幕日产无码| 被两个老头咬住吃奶野战| 国产在线蜜乳一区二区三区| 男朋友要再做一次才同意分手| 欧美成人精品高清在线播放| 欧美A级毛欧美1级A大片式放| 丝瓜草莓视频APP| 无码人妻精品一区二区三区99不卡 | 亚洲久热无码中文字幕人妖| 锕锕锕锕锕锕好大好深APP| 50妺妺窝人体色www合集| 18VIDEOSEX性欧美| H无码动漫在线观看人| 成人无码区免费视频观看| 城中村快餐嫖老妇对白| 国产AV精品一区二区三区| 国产乱色国产精品免费视频 | 妺妺窝人体色WWW聚色窝| 欧美黑人又大又粗XXXⅩ| 午夜.DJ高清免费观看视频| 综合无码成人AⅤ视频在线观看| FRXXEE中国XXEE医生| 国色天香精品卡一卡二卡三二百 | 亚洲精品AⅤ在线观看| 野花日本视频免费观看3| 中文字幕无码精品亚洲资源网久久 | 一边做一边喷17P| 国产成人精品综合久久久| 哈昂~哈昂够了太多太深| 啪啪叉叉xx高清无码| 天天躁夜夜躁狠狠躁2020有剧| 新版天堂8中文在线最新版官网| 91精品人妻一区二区三在线| 成人无码区免费AⅤ片| 久久久久亚州AⅤ无码专区首| 天天天欲色欲色WWW免费| 2021无码专区人妻系列日韩| 激情综合色综合久久综合| 色偷偷AV男人的天堂| 51CG今日吃瓜热门大瓜| 精品国产乱子伦一区二区三区 | 爱情岛论坛自拍亚洲品质极速福利 | 国产传媒中文字幕视频专区| 国产在线乱码一区二区三区| 日本在线人数最多的MMORPG| 午夜无遮挡男女啪啪免费软件| 亚洲国产AⅤ成人精品无吗| 最新精品国偷自产在线婷婷| 国内揄拍国内精品| 色一情一区二区三区四区| 97久久精品午夜一区二区| 精品亚洲成A人片在线观看少妇| 男人一生最吉利的网名| 四虎影视在线观看2413| 亚洲日本一线产区和二线产| 国产精品国产三级国产AV′| 久久久久久亚洲AV无码专区| 人人妻人人躁人人爽精品| 亚洲AV无码国产精品久久| 99久RE热视频这只有精品6| 久久18禁高潮出水呻吟娇喘| 性色AV一区二区三区咪爱四虎| 中文无码精品一区二区三区| 交换配乱吟粗大SNS84O| 无套内射无矿码免费看黄| 大胸美女污污污WWW网站| 欧美人与人动人物2020| 亚洲AV熟妇高潮18P| AV优选天堂污污污成人亚洲| 久久婷婷五月国产色综合| 亚洲AV无码乱码在线观看牲色| 国产AV无码专区亚洲AV| 日本猛少妇色XXXXX猛叫小说| 亚洲精品无码AⅤ中文字幕蜜桃| 凹凸国产熟女精品视频| 你的奶好大让老子摸摸的说说| 夜夜添无码一区二区三区| 番剧初恋不可能是亲姐姐| 精品国产三级A∨在线无码| 无码精品国产VA在线观看| 国产成人啪精品视频免费网站软件 | 久久国语露脸国产精品电影| 亚洲精品乱码久久久久66| 国产女人高潮抽搐叫床视频| 无码国产精品一区二区免费式芒果 | 无码一区二区av| 91老熟女老女人国产老太毛多 | 国产桃色无码视频在线观看| 欧美啪啪抽搐一进一出免费| 中文字幕无码日韩欧免费软件| 看国产黄大片在线观看| 无码人妻精品中文字幕免费| 国产XXXX做受视频国语对白L| 涩爱AV挺进少妇张开双暴躁 | 色欲色香天天天综合无码| 短乱俗小说500篇免费下载 | 欧美大肚子孕妇疯狂作爱视频| 97热久久免费频精品99| 欧美日韩精品视频一区二区| 亚洲国产AV无码专区亚洲AV| 国内极度色诱视频网站| 色777狠狠狠综合| 国产96在线 | 亚洲| 女人与公豬交交30分钟视频| 337P日本欧洲亚洲大胆精筑| 欧美级韩国三级日本三级| 把女人弄爽特黄A大片| 色噜噜狠狠色综合成人网| 国产精品99久久免费| 亚洲AV秘 无码一区二区三l | 国产成人欧美精品视频APP| 无码人妻丰满熟妇| 黑料不打烊吃瓜爆料| 色婷婷综合久久久中文字幕| 丰满少妇人妻无码| 欧美日韩在线视频| 波多野无码中文字幕AV专区| 内地性生生活影视大全| VIDEOS日本多毛HD护士| 免费A级毛片无码A∨中文字幕下| 亚洲老熟女 @ TUBEUM| 久久久久久精品免费S| 8x8x熟妇一区二区三区| 日本适合十八岁以上的护肤品男 | 亚洲色无码国产精品网站可下载| 国产无套粉嫩白浆在线| 亚洲精品无码久久久久AV麻豆 | 99久久亚洲综合精品成人| 日韩一区在线视频| らだ天堂中文在线| 熟妇人妻无乱码中文字幕蜜桃| 国产手机在线ΑⅤ片无码观看| 亚洲国产日韩欧美一区二区三区| 裸体欣赏ⅤIDE0SPH0TO| 亚洲综合色区另类AV| 农民工猛吸女大学奶头| 穿着旗袍方便C英语老师| 午夜亚洲国产理论片亚洲2020 | 国产精品国产亚洲精品看不卡| 亚洲娇小被黑人巨大撑爆| 免费无码AV污污污在线观看 | 久久99老妇伦国产熟女高清 | 国产女人乱子对白AV片| 亚洲综合色区在线观看| 人人妻人人澡AV| NARUTOMANGA无尽纲手| 天堂BT种子在线最新版资源| 精品日产1区2卡三卡麻豆| 亚洲成AV人片在线观看无码不卡 | 驯服小挗子2韩语中字| 乱码一线二线三线新区破解欧| 成人无码H在线观看网站| 亚洲AV综合色一区二区三区| 激情内射亚州一区二区三区爱妻| 中国熟妇人妻XXXXX中文| 色偷偷888欧美精品久久久| 精东传媒VS天美传媒| 被多个男人调教奶头玩奶头| 亚洲国产精品久久久天堂不卡海量 | 精品乱码久久久久久中文字幕| 亚洲精品亚洲人成在线观看麻豆|