成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院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號
色欲AV无码中字乱人伦在线| 久久精品国产亚洲AV忘忧草18| 少妇ⅩXXOOOZZXXHD| 浪潮AV激情高潮国产精品| 国产偷自视频区视频| 东北小伙二十厘米粗大硬| 中文字幕无码专区人妻制服| 亚洲精品欧美综合四区| 无码熟妇ΑⅤ人妻又粗又大 | 艳MU无删减在线观看免费无码| 无码AV在线一区二区| 日韩精品亚洲人成在线观看| 欧美成人精品在线| 两根硕大一起挤进小紧H共妻| 精品国产乱码久久久久久下载 | BT天堂在线WWW最新版官网| 一二三四日本中文在线| 亚洲日本一线产区二线产区| 亚洲AV日韩综合一区尤物| 无码国产精品一区二区免费久久 | 四虎国产精品永久在线| 日韩AV无码精品人妻系列| 欧美肉欲XXⅩOOOHD| 你真紧你这是要我的命吗| 久久久久亚洲精品无码系列| 精品一区二区三区免费毛片爱| 国内精品国内精品自线在拍| 国产精品宅男擼66M3U8| 国产成人AV三级在线观看| 成人国产亚洲精品A区| 波多野结衣AV高清中文字幕| YSL千人千色8610| 把腿张开我要CAO死你在线观看| 99久久伊人精品综合观看| 7777888888精准管家婆| AE成品免费下载网站| BBOX撕裂BASS后门BD| 国产成人麻豆亚洲综合无码精品| 高雅人妻被迫沦为玩物电影BD| 国产AⅤ爽AV久久久久成| 国产成人精品综合久久久久| 精品人妻无码区在线视频| 精品午夜福利在线观看| 久久精品第一国产久精国产宅男6 久久精品第九区免费观看 | 免费人成视频网站在线18| 麻花传媒MV在线播放高清MBA | 护士被弄到高潮喷水抽搐| 精品9E精品视频在线观看| 激情综合激情五月俺也去| 欧美XXXX黑人又粗又长| 午夜亚洲精品久久久久久| 亚洲 日韩 欧美 成人 在线| 亚洲成AV人片在线观看| 亚洲日韩乱码中文无码蜜桃臀网站| YEEZY380蜜桃粉和白色| 娇妻被黑人杂交下呻吟| 日本熟妇人妻XXⅩHD| 甜性涩爱在线播放| 亚洲AⅤ天堂AV天堂无码APP| 亚洲欧美偷拍综合图区| 一出一进一爽一粗一大视频免费的| 纯肉无遮挡H肉动漫在线观看国产 纯肉无遮挡H肉动漫在线观看3D | 午夜精品久久久久久中宇| 亚洲AV无码一区二区二三区我| 亚洲AV无码AV制服另类专区| JAPANESE強姦するAV| 高清国产亚洲精品自在久久| 久久久无码精品亚洲日韩按摩| 天天看片天天AV免费观看| 亚洲AV日韩AV无码| 爆乳女教师 高清BD| 国产精成人品日日拍夜夜免费 | 丰满人妻熟妇乱又伦精品| 国产区精品一区二区不卡中文| 精品无码久久久久久国产| 入禽太深视频免费视频| 亚洲AV无码专区国产乱码波多野| 亚洲一区二区三区无码影院| C交人Z000Z000XXⅩ| 精品人妻无码视频一区二区三区| 少妇太爽丰满一区二区| 亚洲精品成人久久久| 97电影九七电影理论片| 精品深夜AV无码一区二区老年| 天天看高清影视在线观看| AV无码波多野结衣| 久久精品无码专区免费| 人妻少妇久久中文字幕| 无码人妻一区二区三区在线视频| 亚洲熟妇真实自拍另类| 波多野结衣片全部电影| 麻麻让我挺进她的黑森林| 亚洲国产欧美一区二区三区| 国产精品欧美久久久久无广告| 久久久久亚洲AV成人片一区| 亚洲 欧美 国产 制服 动漫| 丰满岳乱妇三级高清| 欧美一卡二卡三卡四卡视| 性夜影院爽黄A爽免费动漫| 丁香花在线电影小说| 久久99老妇伦国产熟女高清| 人妻少妇精品视频无码综合| 永久亚洲成A人片777777| 公翁大龟挺进秀婷全文免费阅读| 欧美老肥妇多毛XXXXX| 五月丁香综合激情六月久久| 粗大的内捧猛烈进出视频嘿嘿视频| 男生J桶进女人P又色又爽又黄| 夜夜高潮夜夜爽夜夜爱爱一区| 大胆人体艺术视频| 欧洲站高端8码特大码47| 亚洲爆乳精品无码一区二区三区| www.内射孕妇网站入口| 激情综合色综合啪啪五月丁香搜索| 玩弄朋友娇妻呻吟交换电影| 2018人人看人人爽| 国产无套内射普通话对白 | 国产精品导航一区二区| 美女把尿口扒开让男人桶爽 | 久久国产午夜精品理论片34页| 亚洲H成年动漫在线观看网站| 国产美女露脸口爆吞精| 欧美极品JIZZHD欧美| 亚洲AV永久无码精品久久麻豆| 国产精品亚洲А∨天堂2018| 玩弄丰满熟妇XXXXX性60| 国产成人精品人人| 天天想你免费看西瓜视频| 国产成人精品白浆久久69| 首页 综合国产 亚洲 丝袜日本 | 337P粉嫩大胆噜噜噜| 黑巨人的又黑又大又长| 人人做人人爱在碰免费| 野外妓女脱裤子让老头玩| 久久久久99精品成人片试看| 少妇兽交PWWW综合网| 隔壁人妻被水电工征服| 天天躁日日躁狠狠躁欧美老妇| 国产精品JK白丝AV网站| 午夜内射高潮视频| 哈昂~哈昂够了太多了老师 | 满熟妇XXXX性久久9久久| 中文字幕乱码亚洲无线码三区| 蜜臀AV性久久久久蜜臀AⅤ麻豆 | 色狠狠一区二区三区香蕉| 中文字幕AV一区| 火车上荫蒂添的好舒服视频| 亚洲成人Av在线| 久久久久精品国产亚洲AV| 中文有码无码人妻在线短视频| 男人又粗又黑又硬的东西 | 人人妻人人爽人人添少妇| 中文天堂网在线最新版| 女人三A级毛片视频| 一二三四视频社区在线一中文| 猫咪成人网站WWW永久网站| 99久9在线 | 免费| 日韩AV无码一区二区三区不卡毛 | 亚洲AV中文无码乱人伦| 久久精品无码一区二区无码| 中文在线最新版天堂| 欧洲另类二三四区| 高黄暴H日本在线观看| 小妖精抬起臀嗯啊H军人| 国产AV无码专区亚洲AV软件| 人妻夜夜爽天天爽三区丁香花| 岛国无码AⅤ片在线观看| 午夜不卡AV免费| 精品无码中文字幕在线| 坐公交忘穿内裤被挺进老| 老头握住校花的双乳| BBWBBW欧美肥妇PICS| 四虎影视新紧急入口| 极品教师动漫在线观看免费完整版| 伊人久久大香线蕉AV不变影院| 精品无人区一区二区三区| 51CG9热心的朝阳群众| 色噜噜久久综合伊人一本| 国产中文欧美日韩在线| 真实国产乱人伦在线视频播放| 久久无码国产专区精品| 野花韩国视频观看免费高清的| 欧美成人午夜免费全部完| 国产成人AV综合亚洲色欲美女| 亚洲精品TY久久久久久久久久| 免费无码又爽又高潮视频| 99精品国产福久久久久久蜜桃| 欧妇女乱妇女乱视频| 观看国产色欲色欲色欲WWW| 亚洲精品国产成人AV| 欧美xxxxx久久短视频| 国产精品无码无片在线观看| 再灬再灬再灬深一点舒服| 秘书在办公室被躁BD在线观看| 刺激交换经历过程小说| 亚洲精品无码一区二区AⅤ污| 欧美一级 片内射欧美乱强| 国语自产精品视频在线区| BBBBBB嫩BBBBBB| 亚洲成AV人片久久|