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

Node.js的非阻塞I/O、異步與事件驅(qū)動介紹

 更新時間:2022年06月24日 15:34:51   作者:小旭2021  
這篇文章介紹了Node.js的非阻塞I/O、異步與事件驅(qū)動,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1、Node.js的單線程 非阻塞 I/O 事件驅(qū)動

在 Java、PHP 或者.net 等服務(wù)器端語言中,會為每一個客戶端連接創(chuàng)建一個新的線程。
而每個線程需要耗費(fèi)大約 2MB 內(nèi)存。也就是說,理論上,一個 8GB 內(nèi)存的服務(wù)器可以同時連接的最大用戶數(shù)為 4000 個左右。要讓 Web 應(yīng)用程序支持更多的用戶,就需要增加服務(wù)器的數(shù)量,而 Web 應(yīng)用程序的硬件成本當(dāng)然就上升了。
Node.js 不為每個客戶連接創(chuàng)建一個新的線程, 而僅僅使用一個線程。當(dāng)有用戶連接了,就觸發(fā)一個內(nèi)部事件,通過非阻塞 I/O、事件驅(qū)動機(jī)制,讓 Node.js 程序宏觀上也是并行的。
使用 Node.js,一個 8GB 內(nèi)存的服務(wù)器,可以同時處理超過 4 萬用戶的連接。

2、Node.js回調(diào)處理異步

//錯誤的寫法:
function getData(){
    //模擬請求數(shù)據(jù)
    var result='';
    setTimeout
    (function(){
        result='這是請求到的數(shù)據(jù)'
        },200);
        return result;
}
console.log(getData());/*異步導(dǎo)致請求不到數(shù)據(jù)*/
     
//正確的處理異步:
function getData(callback){
    //模擬請求數(shù)據(jù)
    var result='';
    setTimeout
    (function(){
        result='這是請求到的數(shù)據(jù)';
        callback(result);
        },200);
    }
    getData(function(data){
    console.log(data);
})

3、Node.js events模塊處理異步

Node.js 有多個內(nèi)置的事件,我們可以通過引入 events 模塊,并通過實例化 EventEmitter類來綁定和監(jiān)聽事件。

// 引入 events 模塊
var events = require('events');
var EventEmitter=new events.EventEmitter(); /*實例化事件對象*/
EventEmitter.on
('toparent',function(){
console.log('接收到了廣播事件');
})
setTimeout
(function(){
    console.log('廣播');
    EventEmitter.emit
    ('toparent'); /*發(fā)送廣播*/
},1000)

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

/*
 Node.js 事件循環(huán):
 
 Node.js 是單進(jìn)程單線程應(yīng)用程序,但是通過事件和回調(diào)支持并發(fā),所以性能非常高。
 
 Node.js 的每一個 API 都是異步的,并作為一個獨(dú)立線程運(yùn)行,使用異步函數(shù)調(diào)用,并處理并發(fā)。
 
 Node.js 有多個內(nèi)置的事件,我們可以通過引入 events 模塊,并通過實例化 EventEmitter 類來綁定和監(jiān)聽事件,
 
 */
 
// 引入 events 模塊
var events = require('events');
 
var EventEmitter = new events.EventEmitter();
 
//監(jiān)聽to_mime的廣播
EventEmitter.on('to_mime', function (data) {
  console.log(data, '接收to_mime的數(shù)據(jù)');
})
 
//監(jiān)聽to_parent的廣播
EventEmitter.on('to_parent', function (data) {
  console.log(data, '接收to_parent的數(shù)據(jù)');
  //廣播to_mime事件
  EventEmitter.emit('to_mime', '發(fā)送to_mime的數(shù)據(jù)')
})
 
setTimeout(function () {
  console.log('開始廣播...');
  //廣播to_parent事件
  EventEmitter.emit('to_parent', '發(fā)送to_parent的數(shù)據(jù)')
}, 1000);

執(zhí)行結(jié)果

開始廣播...
發(fā)送to_parent的數(shù)據(jù) 接收to_parent的數(shù)據(jù)
發(fā)送to_mime的數(shù)據(jù) 接收to_mime的數(shù)據(jù)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解Node.js 事件循環(huán)和回調(diào)函數(shù)

    深入理解Node.js 事件循環(huán)和回調(diào)函數(shù)

    這篇文章主要介紹了深入理解Node.js 事件循環(huán)和回調(diào)函數(shù),詳細(xì)的介紹Node.js 事件循環(huán)和Node.js回調(diào)函數(shù),需要學(xué)習(xí)的可以參考一下。
    2016-11-11
  • Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解

    Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解

    這篇文章主要為大家介紹了Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • npm報錯:request to httpsregistry.npm.taobao.org failed, reason certificate has expired的解決方案

    npm報錯:request to httpsregistry.npm.taobao.org 

    這篇文章主要介紹了npm報錯:request to httpsregistry.npm.taobao.org failed, reason certificate has expired的解決方案,文中有詳細(xì)的解決方案,需要的朋友可以參考下
    2024-03-03
  • websocket實現(xiàn)Vue?3和Node.js之間的實時消息推送

    websocket實現(xiàn)Vue?3和Node.js之間的實時消息推送

    使用?WebSocket?實現(xiàn)實時消息推送是一種高效的方式,可以在客戶端和服務(wù)器之間建立長連接,實現(xiàn)低延遲的雙向通信,以下是一個簡單的示例,展示如何在前端使用?Vue?3?和后端使用?Node.js?搭建一個?WebSocket?實現(xiàn)實時消息推送的應(yīng)用
    2024-06-06
  • 關(guān)于Sequelize連接查詢時inlude中model和association的區(qū)別詳解

    關(guān)于Sequelize連接查詢時inlude中model和association的區(qū)別詳解

    這篇文章主要介紹了關(guān)于Sequelize連接查詢時inlude中model與association的區(qū)別,文中介紹的很詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Node.js開源應(yīng)用框架HapiJS介紹

    Node.js開源應(yīng)用框架HapiJS介紹

    這篇文章主要介紹了Node.js開源應(yīng)用框架HapiJS介紹,本文講解了HapiJS介紹、HapiJS安裝和項目配置和開發(fā)實例等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • autojs的nodejs打包成品app經(jīng)驗分享

    autojs的nodejs打包成品app經(jīng)驗分享

    這篇文章主要為大家介紹了autojs的nodejs打包成品app經(jīng)驗分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • nodeJs的安裝與npm全局環(huán)境變量的配置詳解

    nodeJs的安裝與npm全局環(huán)境變量的配置詳解

    這篇文章主要介紹了nodeJs的安裝與npm全局環(huán)境變量的配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • nodejs初始化init的示例代碼

    nodejs初始化init的示例代碼

    今天小編就為大家分享一篇nodejs初始化init的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • nodejs實現(xiàn)一個自定義的require方法的詳細(xì)流程

    nodejs實現(xiàn)一個自定義的require方法的詳細(xì)流程

    大家對nodejs中的require方法應(yīng)該不會陌生,這個方法可以用來導(dǎo)入nodejs的內(nèi)置模塊,自定義模塊,第三方模塊等,使用頻率非常高,那么這個方法內(nèi)部是如何實現(xiàn)的呢?本篇文章就是從頭到尾拆分實現(xiàn)流程,最終實現(xiàn)一個自定義的require方法,需要的朋友可以參考下
    2025-03-03

最新評論

盱眙县| 新建县| 卢湾区| 大港区| 平乡县| 太仆寺旗| 旬邑县| 朝阳市| 天峨县| 辽中县| 常德市| 德格县| 清原| 汪清县| 莱州市| 什邡市| 商丘市| 祁阳县| 庐江县| 兰溪市| 芜湖县| 汾阳市| 遵义市| 江西省| 子长县| 弥勒县| 盐城市| 若尔盖县| 枣庄市| 秦皇岛市| 买车| 德令哈市| 彰化县| 阜新市| 广东省| 上虞市| 信阳市| 四川省| 交口县| 泽州县| 鞍山市|