亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

基本概念

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

$ node

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

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

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

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

回調函數(shù)

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

阻塞代碼

異步編程依賴于回調,但不能說在使用回調后程序將是異步的。 完成任務后將調用回調函數(shù)。節(jié)點使用大量回調函數(shù)。 節(jié)點的所有API都支持回調函數(shù)。

讀取文件后,我們返回文件內容作為回調函數(shù)的參數(shù)。 這樣,在執(zhí)行代碼時就不會阻塞或等待文件I/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í)行結束!");

非阻塞代碼

創(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í)行結束!");

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

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

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

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

var events = require('events');

創(chuàng)建 eventEmitter 對象

var eventEmitter = new events.EventEmitter();

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

eventEmitter.on('eventName', eventHandler);

觸發(fā)事件

eventEmitter.emit('eventName');

Node 應用程序工作原理

創(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對象的輸出,并通過回調函數(shù)輸出文件內容。

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

執(zhí)行結果如下:

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

EventEmitter 類

每次有新連接時,服務器對象的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ā)事件時,將依次調用注冊到此事件的事件偵聽器,并將事件參數(shù)作為回調函數(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)

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

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

繼承 EventEmitter

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

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

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

相關文章

  • 搭建一個nodejs腳手架的方法步驟

    搭建一個nodejs腳手架的方法步驟

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

    詳解nodejs模板引擎制作

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

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

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

    基于nodejs 的多頁面爬蟲實例代碼

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

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

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

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

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

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

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

    node.js基于mongodb的搜索分頁示例

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

    Node.js基礎入門之模塊與npm包管理器使用詳解

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

    node.js?http模塊概念詳解

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

最新評論