欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js原理阻塞和EventEmitter及其繼承的運(yùn)用實(shí)戰(zhàn)

 更新時(shí)間:2022年08月24日 08:30:26   作者:黎燃???????  
這篇文章主要介紹了Node.js原理阻塞和EventEmitter及其繼承的運(yùn)用實(shí)戰(zhàn),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

基本概念

簡(jiǎn)單地說(shuō),Node.js是在服務(wù)器端運(yùn)行的JavaScript。 節(jié)點(diǎn)。

$ node

> console.log('Hello 黎燃!');
Hello 黎燃!

然而,對(duì)于node JS,概念完全不同。

使用node JS,我們不僅實(shí)現(xiàn)了一個(gè)應(yīng)用程序,還實(shí)現(xiàn)了整個(gè)HTTP服務(wù)器。

事實(shí)上,我們的web應(yīng)用程序和相應(yīng)的web服務(wù)器基本相同。 讓我們了解一下node JS應(yīng)用程序由以下部分組成: 1.介紹所需模塊:我們可以使用require命令加載node JS模塊。 2.創(chuàng)建服務(wù)器:服務(wù)器可以監(jiān)聽(tīng)客戶端的請(qǐng)求,類似于Apache和nginx等HTTP服務(wù)器。 3.接收請(qǐng)求并響應(yīng)請(qǐng)求的服務(wù)器很容易創(chuàng)建??蛻舳丝梢允褂脼g覽器或終端發(fā)送HTTP請(qǐng)求,服務(wù)器收到請(qǐng)求后返回響應(yīng)數(shù)據(jù)。

回調(diào)函數(shù)

Node.jsS異步編程的直接體現(xiàn)是回調(diào)。

阻塞代碼

異步編程依賴于回調(diào),但不能說(shuō)在使用回調(diào)后程序?qū)⑹钱惒降摹?完成任務(wù)后將調(diào)用回調(diào)函數(shù)。節(jié)點(diǎn)使用大量回調(diào)函數(shù)。 節(jié)點(diǎn)的所有API都支持回調(diào)函數(shù)。

讀取文件后,我們返回文件內(nèi)容作為回調(diào)函數(shù)的參數(shù)。 這樣,在執(zhí)行代碼時(shí)就不會(huì)阻塞或等待文件I/O操作。

回調(diào)函數(shù)通常顯示為函數(shù)的最后一個(gè)參數(shù):

function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { }

創(chuàng)建主JS文件,代碼如下:

var fs = require("fs");

var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("程序執(zhí)行結(jié)束!");

非阻塞代碼

創(chuàng)建主JS文件,代碼如下:

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序執(zhí)行結(jié)束!");

在以上兩個(gè)例子中,我們理解阻塞調(diào)用和非阻塞調(diào)用之間的區(qū)別。第一個(gè)實(shí)例在讀取文件后執(zhí)行程序。 在第二個(gè)示例中,我們不需要等待文件被讀取,因此我們可以在讀取文件的同時(shí)執(zhí)行以下代碼,這大大提高了程序的性能。

因此,按順序執(zhí)行阻塞,不需要按順序執(zhí)行非阻塞。

Node.js 事件循環(huán)

 Node.js使用事件驅(qū)動(dòng)模型。 當(dāng)web服務(wù)器接收到一個(gè)請(qǐng)求時(shí),它會(huì)關(guān)閉并處理該請(qǐng)求,然后為下一個(gè)web請(qǐng)求提供服務(wù)。 當(dāng)請(qǐng)求完成時(shí),它將被放回處理隊(duì)列。當(dāng)它到達(dá)隊(duì)列的開(kāi)頭時(shí),結(jié)果將返回給用戶。 引入 events 模塊

var events = require('events');

創(chuàng)建 eventEmitter 對(duì)象

var eventEmitter = new events.EventEmitter();

綁定事件及事件的處理程序

eventEmitter.on('eventName', eventHandler);

觸發(fā)事件

eventEmitter.emit('eventName');

Node 應(yīng)用程序工作原理

創(chuàng)建主JS文件,代碼如下:

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err){
      console.log(err.stack);
      return;
   }
   console.log(data.toString());
});
console.log("程序執(zhí)行完畢");

在上述程序中,F(xiàn)S Readfile()是一個(gè)用于讀取文件的異步函數(shù)。如果在讀取文件期間發(fā)生錯(cuò)誤,error err對(duì)象將輸出錯(cuò)誤消息。

程序執(zhí)行完畢

如果沒(méi)有發(fā)生錯(cuò)誤,readfile將跳過(guò)err對(duì)象的輸出,并通過(guò)回調(diào)函數(shù)輸出文件內(nèi)容。

接下來(lái),我們刪除輸入Txt文件。

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

程序執(zhí)行完畢 Error: ENOENT, open 'input.txt'

EventEmitter 類

每次有新連接時(shí),服務(wù)器對(duì)象的net將觸發(fā)事件,而readstream對(duì)象的FS將在文件打開(kāi)時(shí)觸發(fā)事件。所有生成事件的對(duì)象都是EventEmitter實(shí)例中的事件。

引入 events 模塊

var events = require('events');

創(chuàng)建 eventEmitter 對(duì)象

var eventEmitter = new events.EventEmitter();

如果在實(shí)例化EventEmitter對(duì)象期間發(fā)生錯(cuò)誤,將觸發(fā)錯(cuò)誤事件。添加新偵聽(tīng)器時(shí),將觸發(fā)newlistener事件。刪除偵聽(tīng)器時(shí),將觸發(fā)RemovelListener事件。

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); 

運(yùn)行此代碼,控制臺(tái)在1秒_事件觸發(fā)器后輸出'some'。 觸發(fā)事件時(shí),將依次調(diào)用注冊(cè)到此事件的事件偵聽(tīng)器,并將事件參數(shù)作為回調(diào)函數(shù)參數(shù)傳遞。

var events = require('events'); 
var emitter = new events.EventEmitter(); 
emitter.on('someEvent', function(arg1, arg2) { 
    console.log('listener1', arg1, arg2); 
}); 

on(event, listener)

注冊(cè)指定事件的偵聽(tīng)器,并接受字符串事件和回調(diào)函數(shù)。

server.on('connection', function (stream) {
  console.log('someone connected!');
});

繼承 EventEmitter

大多數(shù)時(shí)候,我們不直接使用EventEmitter,而是在對(duì)象中繼承它。 所有支持事件響應(yīng)的核心模塊,包括FS、net和HTTP,都是EventEmitter的子類。

  • 1.首先,具有實(shí)體函數(shù)的對(duì)象實(shí)現(xiàn)了符合語(yǔ)義的事件。事件的偵聽(tīng)和發(fā)生應(yīng)該是對(duì)象的一種方法。
  • 2.其次,JavaScript的對(duì)象機(jī)制是基于原型的,支持部分多重繼承。繼承EventEmitter不會(huì)干擾對(duì)象的原始繼承關(guān)系。

到此這篇關(guān)于Node.js原理對(duì)于阻塞和EventEmitter及其繼承的運(yùn)用實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Node.js EventEmitter 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 搭建一個(gè)nodejs腳手架的方法步驟

    搭建一個(gè)nodejs腳手架的方法步驟

    這篇文章主要介紹了如何搭建一個(gè)nodejs腳手架的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 詳解nodejs模板引擎制作

    詳解nodejs模板引擎制作

    本篇文章主要介紹了nodejs模板引擎制作 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Node.js 8 中的 util.promisify的詳解

    Node.js 8 中的 util.promisify的詳解

    本篇文章主要介紹了Node.js 8 中的 util.promisify的詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 基于nodejs 的多頁(yè)面爬蟲(chóng)實(shí)例代碼

    基于nodejs 的多頁(yè)面爬蟲(chóng)實(shí)例代碼

    本篇文章主要介紹了基于nodejs 的多頁(yè)面爬蟲(chóng) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • node終端里如何連接mysql數(shù)據(jù)庫(kù)并進(jìn)行sql查詢

    node終端里如何連接mysql數(shù)據(jù)庫(kù)并進(jìn)行sql查詢

    這篇文章主要為大家介紹了node終端里如何連接mysql數(shù)據(jù)庫(kù)并進(jìn)行sql查詢,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Nodejs實(shí)戰(zhàn)心得之eventproxy模塊控制并發(fā)

    Nodejs實(shí)戰(zhàn)心得之eventproxy模塊控制并發(fā)

    本篇文章給大家分享我的nodejs實(shí)戰(zhàn)心得,如何使用eventproxy模塊控制并發(fā),感興趣的朋友可以參考下
    2015-10-10
  • 利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法詳解(并行)

    利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法詳解(并行)

    現(xiàn)在我們可以用瀏覽器調(diào)試node.js了!!!下面這篇文章主要介紹了利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法步驟,文中介紹的很詳細(xì),需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    2017-02-02
  • node.js基于mongodb的搜索分頁(yè)示例

    node.js基于mongodb的搜索分頁(yè)示例

    本篇文章主要介紹了node.js基于mongodb的搜索分頁(yè)示例,mongodb分頁(yè)很簡(jiǎn)單,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。
    2017-01-01
  • Node.js基礎(chǔ)入門(mén)之模塊與npm包管理器使用詳解

    Node.js基礎(chǔ)入門(mén)之模塊與npm包管理器使用詳解

    Node.js是一個(gè)基于Chrome?V8引擎的JavaScript運(yùn)行時(shí)。類似于Java中的JRE,.Net中的CLR。本文將詳細(xì)為大家介紹Node.js中的模塊與npm包管理器的使用,需要的可以參考一下
    2022-03-03
  • node.js?http模塊概念詳解

    node.js?http模塊概念詳解

    http?模塊是?Node.js?官方提供的、用來(lái)創(chuàng)建?web?服務(wù)器的模塊。通過(guò)?http?模塊提供的http.createServer()?方法,就能方便的把一臺(tái)普通的電腦,變成一臺(tái)?Web?服務(wù)器,從而對(duì)外提供?Web?資源服務(wù),本文給大家介紹node.js?http模塊的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-01-01

最新評(píng)論