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

站長(zhǎng)資訊網(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)接口,通過(guò)這些接口可以處理大量的并發(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接收到請(qǐng)求,就把它關(guān)閉然后進(jìn)行處理,然后去服務(wù)下一個(gè)web請(qǐng)求。

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

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

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

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

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

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

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

我們可以通過(guò)程序觸發(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);     } })

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

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

EventEmitter 類

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

你可以通過(guò)require("events");來(lái)訪問(wèn)該模塊。

// 引入 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)聽(tīng)器時(shí),newListener 事件會(huì)觸發(fā),當(dāng)監(jiān)聽(tīng)器被移除時(shí),removeListener 事件被觸發(fā)。

下面我們用一個(gè)簡(jiǎn)單的例子說(shuō)明 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ì)象注冊(cè)了事件 some_event 的一個(gè)監(jiān)聽(tīng)器,然后我們通過(guò) setTimeout 在 1000 毫秒以后向 event 對(duì)象發(fā)送事件 some_event,此時(shí)會(huì)調(diào)用some_event 的監(jiān)聽(tīng)器。

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

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

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

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

//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 注冊(cè)了兩個(gè)事件監(jiān)聽(tīng)器,然后觸發(fā)了 someEvent 事件。

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

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

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
天堂8中文在线最新版官网| 欧美 日韩 国产 成人 在线观看| 吃了继兄给我开的药我做的梦| 欧洲熟妇色XXXX欧美老妇性| 精品无码久久久久久尤物| 国产成年无码久久久久下载| AI换脸造梦JENNIE喷水| 亚洲一区二区三区无码影院| 无人区乱码一线忘忧草| 日韩乱码人妻无码中文字幕| 欧美人与动牲交免费观看视频| 久久精品国产99国产精品澳门| 国产日韩精品中文字无码| 成人H视频在线观看| 97超碰精品成人国产| 又爽又黄又无遮挡网站动态图| 亚洲精品成人片在线观看精品| 性AV盈盈无码天堂| 玩弄丰满少妇XXXXX性多毛| 三个人C了我半小时| 人妻系列AV无码专区| 欧美18VIDEOSEX性欧美| 免费A级毛片无码樱桃视频| 久久精品国产精品亚洲毛片| 蜜臀国产AV天堂久久无码蜜臀| 久久久精品成人免费观看国产| 极品粉嫩小泬50P| 黑人又大又粗又硬XXXXX| 国精产品一品二品国精HTC| 国产精品爽爽V在线观看无码| 疯狂做爰XXXⅩ高潮69短| 成人白浆超碰人人人人| 国产午夜成人无码免费看| 国产精品沙发午睡系列| 久久精品无码一区二区三区免费| 欧美怡春院一区二区三区| 人妻丰满AV中文久久不卡| 人妻少妇精品无码专区二区| 无码专区无码专区视频网址| 医院人妻闷声隔着帘子被中出| 亚洲综合AV色婷婷国产野外| 一二三四免费观看视频中国| 野花在线高清视频| 在线播放免费人成毛片试看| 综合 欧美 亚洲日本| 18禁裸男晨勃露J毛免费观看 | 色偷偷888欧美精品久久久 | 人人妻人人澡人人爽| 亚洲AV无码一区二区在线蜜桃| 亚洲AV日韩AV永久无码绿巨人 | 日本久久久久久久久久加勒比| 欧洲无人区卡一卡二| 亚洲 欧美 综合 另类 中字| 亚洲国产精品久久久久久| 亚洲人成色777777在线观看| 一二三四影视在线看片免费| 疯狂做受ⅩⅩⅩⅩ高潮高清视频| 久久精品网站免费观看| 少妇粉嫩小泬喷水视频在线观看| 上边一面亲下边一面膜的作用| 亚洲乱码av无码一区二区三区| 一本大道AV伊人久久综合| 大屁股熟女白浆一区二区| 国产精品丝袜高跟鞋| 年轻的小婊孑4中文字幕电影| 欧美熟妇精品视频网免费观看 | 亚洲成A人片在线观看国产| 亚洲欧美成人中文日韩电影网站| 差差漫画网页登录页面弹窗| 国产成人精品福利一区二区三区| 疯狂做受XXXX高潮不断| 国语做受对白XXXXX在线| 国产GAYSEXCHINA男同| 国产精品亚洲А∨天堂免| 韩日午夜在线资源一区二区| 久久精品国产99久久丝袜蜜桃| 色欲av夜夜嗨av性色av| 中文日产无乱码AV在线观 | 熟妇人妻久久中文字幕麻豆网| 无码熟妇人妻AV影片在线| AA区一区二区三无码精片| 精品VIDEOSSEXFREEOHDBBW| 黎朔缠着腰不让他退出微博| 欧美高清视频手机在在线| 少妇人妻14页_麻花色| 88久久精品无码一区二区毛片| 韩国三级中文字幕HD| 少妇无码AV无码专区在线观看| 亚洲av网站在线观看| 村长用力挺进她的花苞啥电视 | 在线观看国产成人AⅤ天堂| 国产熟女一区二区| 久久影院午夜伦手机不四虎卡| 人妻无码久久中文字幕专区| 一边做饭一边暴躁怎么办| 国产真实乱XXXⅩ视频| 麻豆文化传媒精品一区观看| 日韩AV在线一区二区| 亚洲爆乳精品无码一区二区| 区产品乱码芒果精品P站| 男女交性视频无遮挡全过程| 热RE99久久精品国产99热| 夜夜天天噜狠狠爱2019| 韩漫漫画登录页面入口弹窗秋蝉张| 色综合色狠狠天天综合色| CHINESE高潮收缩ORGASM| 国产乱XXXX搡XXXXX搡| 日韩人妻中文字幕2021视频| JZZIJZZIJ日本成熟少妇| 国产真实乱对白精彩久久| 少妇AV一区二区三区无码| 波多野结衣的电影| 精品少妇爆乳无码av专用区| 亚洲AVAV电影AV天堂18禁| NARUTOMANGA全彩纲手| 男女爽爽无遮挡免费视频| 伊人久久大香线蕉无码不卡| 精品无码成人片一区二区| 亚洲AV无码专区色爱天堂老鸭窝| 国产美女裸体丝袜喷水视频| 嫩草伊人久久精品少妇AV| 呦香8黝黝狖呦香8| 久久人人爽人人爽人人片Ⅴ| 我趁老师睡觉摸她奶脱她内裤 | 国产一区日韩二区欧美三区| 无码人妻啪啪一区二区| 99精品国产福久久久久久| 国语第一次处破女| 亚洲AV无码精品色午夜在线观看| 宝宝好大我都握不住了视频 | 欧美日韩成人在线播放| C交人Z000Z000XXⅩ| 欧美午夜成人精品| 八戒八戒神马手机在线高清观看W| 久久99老妇伦国产熟女高清| 熟女丝袜香蕉双人女高潮| 公交车上穿短裙被狂C| 婷婷综合缴情亚洲狠狠| 91夜色精品偷窥熟女精品网站| 男人激烈吮乳吃奶到高潮视频 | 国产夫妻CCCXXX久久久| 欧美黑人XXXXXⅩ| 97精品依人久久久大香线蕉97 | 久久精品亚洲男人的天堂| 野花日本大全免费观看版动漫| 国产精品成人无码视频| 人伦亲情父母儿女的句子简短| WWW夜片内射视频在观看视频| 久久精品国产99精品国产亚洲性| 亚洲一区二区三区国产精华液| 老牛精品亚洲成AV人片| 91人妻人人澡人人爽人人精品| 人妻无码一区二区三区免费 | 铜铜铜铜铜铜铜铜铜好多水| 国产人成高清在线视频99最全资| 亚洲AV永久无码精品网站| 久久久久久国产精品免费免费男同| 小少妇BBBBBBBBBBBB| 国产欧美久久一区二区| 欧美肥胖老太大喷水| 东北老女人高潮大喊舒服死了| 老牛aV无码一区二区人妻| √天堂资源在线中文8在线最新版| 青青草无码精品伊人久久| 国产AVXXXX无套内射| 亚洲AV无码乱码在线观看性色 | 亚洲无日韩码精品| 内射人妻视频国内| 短裙公车被强好爽H吃奶视频| 性色AV极品无码专区亚洲AV| 久久成人麻豆午夜电影| 99久热RE在线精品99RE| 蜜桃人妻无码AⅤ中文字幕| がーるずらっしゅ在线中文| 欧美丰满熟妇XX猛交| 丰满人妻熟妇乱又伦精品视频三| 人妻少妇看A偷人无码精品视频| 公侵犯人妻一区二区三区| 色欲久久久天天天综合网| 国产一区二区三精品久久久无广告| 亚洲伊人久久综合| 人妻被按摩到潮喷中文字幕| 国产乱码精品一区二区三区中文| 亚洲综合国产成人无码| 人妻无码一区二区三区蜜桃视频| 国产香蕉一区二区三区在线视频| 在线天堂おっさんとわたしWWW| 久久在精品线影院精品国产| 边吃奶边扎下面动态| 亚洲AV成人一区二区三区| 麻花传媒MV与其它传媒公司比较| 成人H动漫精品一区二区无码| 亚洲AV无码日韩精品影片| 男女一起差差差差差| 国产高清中文版HD中字| 夜夜爽8888免费视频| 色欲色香天天天综合WWW| 久久精品国产99精品国产亚洲性| 草草最新发地布地址①·| 亚洲国产成人久久综合下载|