首先 node 是單進(jìn)程單線程的應(yīng)用程序,這取決與 js 設(shè)計(jì)之初降低復(fù)雜度的考量。
但是得益于 chrome V8 引擎提供的異步執(zhí)行毀掉接口,從而可以處理并發(fā)。
Node.js 所有的非阻塞 I/O 操作在完成時(shí)都會(huì)發(fā)送一個(gè)事件到事件隊(duì)列。
這一事件機(jī)制使用設(shè)計(jì)模式中的觀察者模式實(shí)現(xiàn),使用事件驅(qū)動(dòng)模型,當(dāng) web server 接到請(qǐng)求,就把它關(guān)閉后進(jìn)行處理,隨后去服務(wù)下一個(gè) web 請(qǐng)求。當(dāng)這個(gè)請(qǐng)求完成,他就會(huì)被放回處理隊(duì)列,當(dāng)?shù)竭_(dá)隊(duì)列頭,就返回給用戶。
我們可以通過 Node.js 內(nèi)置的 events 模塊,實(shí)例化 EventEmitter 來綁定和監(jiān)聽事件。
實(shí)例化 eventEmitter 對(duì)象
EventEmitter 的每個(gè)事件由一個(gè)事件名和若干個(gè)參數(shù)組成,事件名是一個(gè)字符串,通常表達(dá)一定的語義。對(duì)于每個(gè)事件,EventEmitter 支持 若干個(gè)事件監(jiān)聽器。
當(dāng)事件觸發(fā)時(shí),注冊(cè)到這個(gè)事件的事件監(jiān)聽器被依次調(diào)用,事件參數(shù)作為回調(diào)函數(shù)參數(shù)傳遞。
依次調(diào)用事件
上例中,emitter 為事件 someEvent 注冊(cè)了兩個(gè)事件監(jiān)聽器,然后觸發(fā)了 someEvent 事件。





暫無評(píng)論,快來評(píng)論吧!