Node.js的非阻塞I/O、异步与事件驱动实例分析

今天小编给大家分享一下Node.js的非阻塞I/O、异步与事件驱动实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一

今天小编给大家分享一下Node.js的非阻塞I/O、异步与事件驱动实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1、Node.js的单线程 非阻塞 I/O 事件驱动

在 Java、PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程。
而每个线程需要耗费大约 2MB 内存。也就是说,理论上,一个 8GB 内存的服务器可以同时连接的最大用户数为 4000 个左右。要让 Web 应用程序支持更多的用户,就需要增加服务器的数量,而 Web 应用程序的硬件成本当然就上升了。
Node.js 不为每个客户连接创建一个新的线程, 而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞 I/O、事件驱动机制,让 Node.js 程序宏观上也是并行的。
使用 Node.js,一个 8GB 内存的服务器,可以同时处理超过 4 万用户的连接。

2、Node.js回调处理异步

//错误的写法:
function getData(){
    //模拟请求数据
    var result='';
    setTimeout
    (function(){
        result='这是请求到的数据'
        },200);
        return result;
}
console.log(getData());/*异步导致请求不到数据*/
     
//正确的处理异步:
function getData(callback){
    //模拟请求数据
    var result='';
    setTimeout
    (function(){
        result='这是请求到的数据';
        callback(result);
        },200);
    }
    getData(function(data){
    console.log(data);
})

3、Node.js events模块处理异步

Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter类来绑定和监听事件。

// 引入 events 模块
var events = require('events');
var EventEmitter=new events.EventEmitter(); /*实例化事件对象*/
EventEmitter.on
('toparent',function(){
console.log('接收到了广播事件');
})
setTimeout
(function(){
    console.log('广播');
    EventEmitter.emit
    ('toparent'); /*发送广播*/
},1000)

Node.js 事件循环

/*
 Node.js 事件循环:
 
 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。
 
 Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。
 
 Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,
 
 */
 
// 引入 events 模块
var events = require('events');
 
var EventEmitter = new events.EventEmitter();
 
//监听to_mime的广播
EventEmitter.on('to_mime', function (data) {
  console.log(data, '接收to_mime的数据');
})
 
//监听to_parent的广播
EventEmitter.on('to_parent', function (data) {
  console.log(data, '接收to_parent的数据');
  //广播to_mime事件
  EventEmitter.emit('to_mime', '发送to_mime的数据')
})
 
setTimeout(function () {
  console.log('开始广播...');
  //广播to_parent事件
  EventEmitter.emit('to_parent', '发送to_parent的数据')
}, 1000);

执行结果

开始广播...
发送to_parent的数据 接收to_parent的数据
发送to_mime的数据 接收to_mime的数据

以上就是“Node.js的非阻塞I/O、异步与事件驱动实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注恰卡网行业资讯频道。

本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
开发者

IdentityServer4怎么使用

2022-8-3 21:04:05

开发者

怎么使用Vite+React搭建一个开源组件库

2022-8-3 21:04:27

搜索