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

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

聊聊Node.js中的事件驅(qū)動(dòng)程序和EventEmitter類

本篇文章帶大家了解一下Node中的事件,聊聊一下事件驅(qū)動(dòng)程序和EventEmitter 類,希望對(duì)大家有所幫助!

聊聊Node.js中的事件驅(qū)動(dòng)程序和EventEmitter類

Nodejs 是單進(jìn)程單線程應(yīng)用程序,但是因?yàn)?V8 引擎提供的異步執(zhí)行回調(diào)接口,通過這些接口可以處理大量的并發(fā),所以性能非常高。

Node.js 幾乎每一個(gè) API 都是支持回調(diào)函數(shù)的。

Node.js 基本上所有的事件機(jī)制都是用設(shè)計(jì)模式中觀察者模式實(shí)現(xiàn)。

Node.js 單線程類似進(jìn)入一個(gè)while(true)的事件循環(huán),直到?jīng)]有事件觀察者退出,每個(gè)異步事件都生成一個(gè)事件觀察者,如果有事件發(fā)生就調(diào)用該回調(diào)函數(shù)。


事件驅(qū)動(dòng)程序

Node.js 使用事件驅(qū)動(dòng)模型,當(dāng)web server接收到請求,就把它關(guān)閉然后進(jìn)行處理,然后去服務(wù)下一個(gè)web請求。

當(dāng)這個(gè)請求完成,它被放回處理隊(duì)列,當(dāng)?shù)竭_(dá)隊(duì)列開頭,這個(gè)結(jié)果被返回給用戶。

這個(gè)模型非常高效可擴(kuò)展性非常強(qiáng),因?yàn)?webserver 一直接受請求而不等待任何讀寫操作。(這也稱之為非阻塞式IO或者事件驅(qū)動(dòng)IO)

在事件驅(qū)動(dòng)模型中,會(huì)生成一個(gè)主循環(huán)來監(jiān)聽事件,當(dāng)檢測到事件時(shí)觸發(fā)回調(diào)函數(shù)。

Node.js 有多個(gè)內(nèi)置的事件,我們可以通過引入 events 模塊,并通過實(shí)例化 EventEmitter 類來綁定和監(jiān)聽事件,如下實(shí)例:

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

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

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

我們可以通過程序觸發(fā)事件:

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

實(shí)例

創(chuàng)建 index.js 文件,代碼如下所示:

//引入 fs 模塊 var fs = require("fs");  // 引入 events 模塊 var events = require('events');  // 創(chuàng)建對(duì)象 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("讀取出錯(cuò):"+err);     }else{         console.log("讀取成功:"+data);         // 觸發(fā)res事件         ee.emit('res',data);     } })

接下來讓我們執(zhí)行以上代碼:

聊聊Node.js中的事件驅(qū)動(dòng)程序和EventEmitter類

EventEmitter 類

events 模塊只提供了一個(gè)對(duì)象: events.EventEmitterEventEmitter 的核心就是事件觸發(fā)與事件監(jiān)聽器功能的封裝。

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

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

EventEmitter 對(duì)象如果在實(shí)例化時(shí)發(fā)生錯(cuò)誤,會(huì)觸發(fā) error 事件。當(dāng)添加新的監(jiān)聽器時(shí),newListener 事件會(huì)觸發(fā),當(dāng)監(jiān)聽器被移除時(shí),removeListener 事件被觸發(fā)。

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

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

執(zhí)行結(jié)果如下:

運(yùn)行這段代碼,1 秒后控制臺(tái)輸出了 'some_event 事件觸發(fā)' 。其原理是 event 對(duì)象注冊了事件 some_event 的一個(gè)監(jiān)聽器,然后我們通過 setTimeout 在 1000 毫秒以后向 event 對(duì)象發(fā)送事件 some_event,此時(shí)會(huì)調(diào)用some_event 的監(jiān)聽器。

$ node event.js  some_event 事件觸發(fā)

EventEmitter 的每個(gè)事件由一個(gè)事件名和若干個(gè)參數(shù)組成,事件名是一個(gè)字符串,通常表達(dá)一定的語義。對(duì)于每個(gè)事件,EventEmitter 支持 若干個(gè)事件監(jiān)聽器。

當(dāng)事件觸發(fā)時(shí),注冊到這個(gè)事件的事件監(jiān)聽器被依次調(diào)用,事件參數(shù)作為回調(diào)函數(shù)參數(shù)傳遞。

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

//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 參數(shù)', 'arg2 參數(shù)');

執(zhí)行以上代碼,運(yùn)行的結(jié)果如下:

$ node event.js  listener1 arg1 參數(shù) arg2 參數(shù) listener2 arg1 參數(shù) arg2 參數(shù)

以上例子中,emitter 為事件 someEvent 注冊了兩個(gè)事件監(jiān)聽器,然后觸發(fā)了 someEvent 事件。

運(yùn)行結(jié)果中可以看到兩個(gè)事件監(jiān)聽器回調(diào)函數(shù)被先后調(diào)用。 這就是EventEmitter最簡單的用法。

EventEmitter 提供了多個(gè)屬性,如 onemiton 函數(shù)用于綁定事件函數(shù),emit 屬性用于觸發(fā)一個(gè)事件。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
午夜麻豆国产精品无码| 男女无遮挡猛进猛出免费视频| WWW爱射网站AVCOM| 精品亚洲卡一卡2卡三卡乱码 | 中文字幕一区二区人妻5566| 亚洲AV无码成人精品涩涩| 人妻 色综合网站| 妺妺窝人体色WWW在线直播| 欧美一进一出抽搐大尺度视频| 老首长曰杨钰莹好爽| 娇妻在客厅被朋友玩得呻吟动漫| 国产精华液一区二区区别| 部长的夫人的味道中字| WWW国产精品人妻一二三区| 成人一区二区免费中文字幕视频| FREE性欧美精品VIDEOS| 18禁亲胸揉胸膜下刺激免费网站| 亚洲愉拍99热成人精品热久久| 亚洲AV福利院在线观看| 忘忧草社区WWW日本动漫| 色YEYE香蕉凹凸视频在线观看| 秋霞免费理论片在线观看| 爽爽AV浪潮AV一区二区| 四虎国产精品永久在线动漫| 色偷偷亚洲第一成人综合网址| 人妻少妇无码一区二区三区| 欧美人与动牲交免费观看视频| 久久综合香蕉国产蜜臀AV| 久久久国产精品ⅤA麻豆百度| 好男人 好资源在线 视频| 国产免费AV片无码永久免费| 国产免费AV一区二区三区| 久久国产乱子伦精品免费女人| 精品人妻无码一区二| 精品亚洲国产成人AV不卡| 女儿的朋友7中汉字晋通话| 女女互磨互喷水高潮LES呻吟| 免费视频玩乳吃奶不遮挡网站| 免费观看添你到高潮视频| 免费看又黄又无码的网站| 色天天躁夜夜躁天干天干 | 国产伦理一区二区| 巨大黑人XXXXX高潮| 少妇无码一区二区三区免费| 日韩少妇人妻夜夜爽| 少妇无码人妻一区二区三区| 亚洲蜜桃无码一区二区三区| 亚洲熟妇AV一区二区三区浪潮| 亚洲无人区码卡二卡三卡四卡| 一二三四免费观看在线视频 | 无码人妻熟妇av又大又粗浪潮| 未成满18禁止免费无码网站| 一进一出一爽又粗又大| 第二书包网高H肉辣文| 国产超碰人人模人人爽人人添 | 久久精品国产99精品国产亚洲性| 久久天堂AV综合合色蜜桃网| 久久亚洲私人国产精品VA| 男人吃奶摸下挵进去好爽| 无码中文字幕日韩专区视频| 亚洲AV成人片无码网站| 亚洲欧美日韩综合久久| 中国少妇XXXX做受| 啊灬啊灬啊灬高潮了听书最新章节| 丰满少妇AAAAAA爰片毛片| 国产偷国产偷亚州清高APP| 久久99久久99精品免观看| 日本人妻丰满大屁股a v| 无码人妻一区二区三区免费视频 | 成人免费午夜无码视频在线播放| 丰满人妻一区二区三区免费视频| 久久香蕉综合色一综合色88| 推拿完整版中文字幕| 亚洲AV无码潮喷在线观看| 宝宝怎么这么湿~别磨| 国产精品久久久久久成人影院| 国语对白做受XXXXX在| 久久亚洲人成网站| 无码夜色一区二区三区| JΑPΑNESEHD熟女熟妇伦| 久久国产情侣露脸精品| 无码国模大尺度视频在线观看 | A毛片毛片看免费| 国产福利在线永久视频| 欧美肥胖老太大喷水| 特级毛片内射WWW无码| 91人人澡人人爽内射电影院| 丰满多毛的大隂户毛茸茸| 蜜臀av蜜臀一区二区三区| 日韩人妻无码一区二区三区综合| 中文无码一区二区不卡ΑV| 疯狂做爰XXXⅩ高潮69短| 精品无人区麻豆乱码无限制| 欧美日韩国产成人高清视频| 撒尿BBWBBW| 亚洲精品第一国产综合亚AV| 99久久国产综合精品成人影院| 国产粉嫩馒头无套内在线观看免费 | 初尝禁果稚嫩宫交H| 精品第一国产综合精品AⅤ| 欧美色成人综合天天影院| 伊人久久大香线蕉午夜| 丰满熟女高潮毛茸茸欧洲视频| 欧美人与性动交Α欧美精品| 野花社区日本韩国免费观看| 大爷你的太大了我| 欧美日韩精品视频一区二区三区| 一区二区三区在线 | 网站| 禁止18点击进入在线看片尤物| 无码AV无码天堂资源网| 低调看JRS直播| 人人做人人澡人人爽欧美| 亚洲精品99久久久久中文字幕| 国产精品人人做人人爽| 欧美黑人巨大XXXXX| 亚洲AV无码一区二区三区系列| 99品一二三产区区别| 美女爆乳裸体WWW免费网站| 无码专区 丝袜美腿 制服师生| 穿越后每天都在PIAPIA打脸| 日本护士体内SHE精2╳╳╳| WINDOWS乱码的乱码大全| 欧美交换配乱婬粗大| 99精品国产福久久久久久蜜桃| 国内精品久久久久久影院| 日本55丰满熟妇厨房伦| JAPANESE中国丰满少妇| 欧美成AⅤ人高清免费| 99精品国产一区二区三区| 哪种女人弄进去最舒服| 91人妻人人揉人人躁人人| 女人与公拘交酡ZOZO| 91精品人妻人人做人碰人人爽 | 久久久久久精品久久久| 完整版免费AV片| 国产极品美女高潮无套| 午夜精品久久久久久毛片| 国产精品自在线拍国产手机版| 欧美激情国产精品视频一区| 99精品久久久久精品双飞| 欧美日韩不卡高清在线看| YY6080理AAA级伦大片| 日本理论片和搜子同居的日子| 成人AV鲁丝片一区二区免费| 色在线 | 国产| 国产精品久久久久免费A∨| 香蕉久久久久久AV综合网成人| 成人精品一区二区三区电影| 日韩一区二区视频在线| 国产成人A码男人的天堂| 性生大片免费观看网站| 丰满人妻中伦妇伦精品APP| 天天综合天天爱天天做| ZOOM与人性ZOOM2023| 日韩精品人妻中文字幕有码| AV人摸人人人澡人人超碰小说| 久久久久AV无码免费网| 中文字幕无码家庭乱欲| 久久国产精品一国产精品金尊 | 粗大的内捧猛烈进出无码| 天天看片天天AV免费观看| 含羞草实验室隐藏路线| 夜夜揉揉日日人人| 精品久久久久久成人AV| 一本一道AV中文字幕无码| 女人高潮娇喘抽搐喷水动态视频 | 久久中文字幕AV不卡一区二区| 97在线视频人妻无码| 色狠狠久久AV五月综合| 国产综合18久久久久久| 幼儿HIPHOP仙踪林的功能| 护士奶头又白又大又好摸视频| 无遮挡又色又刺激的视频黄| 精品无码一区二区三区爱欲| 中文字幕AV无码一区二区三区电 | 国产AⅤ无码旗袍丝袜美腿| 女性C春合欢液高朝液精华液| 成都私人家庭影院的推荐理由| 欧美性猛交XXXX乱大交丰满| 丰满圆润大胸在线| 亚洲AV无码成人精品网站| 邻居少妇张开腿让我爽了一夜视频| 把腿扒开做爽爽视频| 人妻人人添人妻人人爱| 国产成人免费AV片在线观看| 天堂8在线新版官网| 精品熟人妻一区二区三区四区不卡| 中文字幕日韩一区二区三区不卡| 色综合久久中文字幕无码| 精品推荐国产AV剧情| Japanese 国产一区| 羞羞麻豆国产精品1区2区3区| 麻豆AV字幕无码中文| 51精产国品一二三产区| 欧美精品人人做人人爱视频| 国产成人一区二区三区APP| 一二三四在线观看视频韩国| 三个人一起玩3Q详细经过| 久久精品熟女亚洲AV麻豆| 成年女人天堂香蕉网|