Node.js的非阻塞I/O、异步与事件驱动介绍

 更新时间:2022年06月24日 15:34:51   作者:小旭2021  
这篇文章介绍了Node.js的非阻塞I/O、异步与事件驱动,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

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的数据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。

相关文章

  • NodeJS提供了的文件操作相关的API

    NodeJS提供了的文件操作相关的API

    让前端觉得如获神器的不是NodeJS能做网络编程,而是NodeJS能够操作文件,小至文件查找,大至代码编译,几乎没有一个前端工具不操作文件,换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作,就能够编写出大多数前端工具
    2023-11-11
  • node使用request请求的方法

    node使用request请求的方法

    这篇文章主要介绍了node使用request请求的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 在 Node.js 中使用原生 ES 模块方法解析

    在 Node.js 中使用原生 ES 模块方法解析

    这篇文章主要介绍了在 Node.js 中使用原生 ES 模块方法解析,还有部分内容的链接,下面我们就来一起看看吧,需要的朋友可以参考下。
    2017-09-09
  • 如何让node运行es6模块文件及其原理详解

    如何让node运行es6模块文件及其原理详解

    这篇文章主要介绍了如何让node运行es6模块文件及其原理详解,详细的介绍了2种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • nodejs dgram模块广播+组播的实现示例

    nodejs dgram模块广播+组播的实现示例

    这篇文章主要介绍了nodejs dgram模块广播+组播的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Node.js如何响应Ajax的POST请求并且保存为JSON文件详解

    Node.js如何响应Ajax的POST请求并且保存为JSON文件详解

    这篇文章主要介绍了关于Node.js是如何响应Ajax的POST请求并且保存为JSON文件的相关资料,文中介绍的很详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Lua表达式和控制结构学习笔记

    Lua表达式和控制结构学习笔记

    这篇文章主要介绍了Lua表达式和控制结构学习笔记,本文讲解了算术操作符、关系操作符、逻辑操作符、局部变量与作用域、控制结构等内容,需要的朋友可以参考下
    2014-12-12
  • 使用 Node.js 模拟滑动拼图验证码操作的示例代码

    使用 Node.js 模拟滑动拼图验证码操作的示例代码

    本篇文章主要介绍了使用 Node.js 模拟滑动验证码操作的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • nvm版本导致npm?install报错Unexpected?token?'.'的解决办法

    nvm版本导致npm?install报错Unexpected?token?'.'的解决办法

    最近做项目遇到npm install 的问题,下面这篇文章主要给大家介绍了关于nvm版本导致npm?install报错Unexpected?token?'.'的解决办法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • nodejs服务搭建教程 nodejs访问本地站点文件

    nodejs服务搭建教程 nodejs访问本地站点文件

    这篇文章主要为大家详细介绍了nodejs服务搭建教程,访问本地站点文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04

最新评论

?


http://www.vxiaotou.com