最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

基本概念

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

$ node

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

然而,對于node JS,概念完全不同。

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

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

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

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

阻塞代碼

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

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

回調(diào)函數(shù)通常顯示為函數(shù)的最后一個參數(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é)束!");

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

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

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

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

var events = require('events');

創(chuàng)建 eventEmitter 對象

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()是一個用于讀取文件的異步函數(shù)。如果在讀取文件期間發(fā)生錯誤,error err對象將輸出錯誤消息。

程序執(zhí)行完畢

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

接下來,我們刪除輸入Txt文件。

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

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

EventEmitter 類

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

引入 events 模塊

var events = require('events');

創(chuàng)建 eventEmitter 對象

var eventEmitter = new events.EventEmitter();

如果在實例化EventEmitter對象期間發(fā)生錯誤,將觸發(fā)錯誤事件。添加新偵聽器時,將觸發(fā)newlistener事件。刪除偵聽器時,將觸發(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); 

運行此代碼,控制臺在1秒_事件觸發(fā)器后輸出'some'。 觸發(fā)事件時,將依次調(diào)用注冊到此事件的事件偵聽器,并將事件參數(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)

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

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

繼承 EventEmitter

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

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

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

相關(guān)文章

  • 寶塔部署nodejs項目的實戰(zhàn)步驟

    寶塔部署nodejs項目的實戰(zhàn)步驟

    前段時間部署node項目的時候出現(xiàn)了一點問題,所以想著給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于寶塔部署nodejs項目的實戰(zhàn)步驟,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 在Node.js中實現(xiàn)獲取用戶頻道信息的功能

    在Node.js中實現(xiàn)獲取用戶頻道信息的功能

    在構(gòu)建社交或視頻分享平臺時,允許用戶查看其他用戶的頻道信息是一個基本需求,本文將介紹如何在Node.js應(yīng)用中,使用Express框架和Mongoose庫來實現(xiàn)這一功能,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • Node.js + express實現(xiàn)上傳大文件的方法分析【圖片、文本文件】

    Node.js + express實現(xiàn)上傳大文件的方法分析【圖片、文本文件】

    這篇文章主要介紹了Node.js + express實現(xiàn)上傳大文件的方法,結(jié)合實例形式分析了Node.js + express針對圖片、文本文件上傳操作實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-03-03
  • nodejs搭建本地http服務(wù)器教程

    nodejs搭建本地http服務(wù)器教程

    本篇文章主要介紹了nodejs搭建本地http服務(wù)器教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 使用GruntJS構(gòu)建Web程序之Tasks(任務(wù))篇

    使用GruntJS構(gòu)建Web程序之Tasks(任務(wù))篇

    任務(wù)(Tasks)是grunt的核心概念,你所做的很多工作比如資源合并(concat)、壓縮(uglify)都是在配置任務(wù)。 每次grunt運行的時候,你指定的一個或多個任務(wù)也在運行,如果你沒有指定任務(wù),那么一個默認名為“default”的任務(wù)將自動運行。
    2014-06-06
  • nodejs 實現(xiàn)模擬form表單上傳文件

    nodejs 實現(xiàn)模擬form表單上傳文件

    使用nodejs來模擬form表單進行文件上傳,可以同時上傳多個文件。
    2014-07-07
  • node版本沖突問題的解決方案

    node版本沖突問題的解決方案

    因為項目用的依賴和要運行環(huán)境的node.js版本起了沖突,下面這篇文章主要給大家介紹了關(guān)于node版本沖突問題的解決方案,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Node.js中readline模塊實現(xiàn)終端輸入

    Node.js中readline模塊實現(xiàn)終端輸入

    本文主要介紹了Node.js中readline模塊實現(xiàn)終端輸入,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Node.js?操作本地文件及深入了解fs內(nèi)置模塊

    Node.js?操作本地文件及深入了解fs內(nèi)置模塊

    這篇文章主要介紹了Node.js?操作本地文件及深入了解fs內(nèi)置模塊,node.js作為服務(wù)端應(yīng)用,肯定少不了對本地文件的操作,像創(chuàng)建一個目錄、創(chuàng)建一個文件、讀取文件內(nèi)容等都是我們開發(fā)中經(jīng)常需要用到的功能
    2022-09-09
  • node+experss實現(xiàn)爬取電影天堂爬蟲

    node+experss實現(xiàn)爬取電影天堂爬蟲

    本文給大家分享的是node+experss制作爬蟲的第二篇,我們來爬取電影天堂最新更新的電影迅雷下載鏈接,有需要的小伙伴可以參考下
    2016-11-11

最新評論

浮山县| 汤阴县| 永康市| 美姑县| 建湖县| 河津市| 大化| 扶沟县| 香格里拉县| 邵武市| 应城市| 新密市| 屯留县| 方正县| 孟连| 纳雍县| 郑州市| 阳城县| 江油市| 张家港市| 修水县| 邢台市| 平南县| 太谷县| 灵川县| 肥乡县| 巫溪县| 兴海县| 新津县| 临泽县| 南雄市| 伊春市| 岳阳县| 海原县| 元氏县| 乐清市| 新野县| 南川市| 民勤县| 当涂县| 丰城市|