Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >哪一项是正确的Node.js架构?

哪一项是正确的Node.js架构?
EN

Stack Overflow用户
提问于 2016-04-21 10:22:48
回答 1查看 23.5K关注 0票数 35

我对Node.js的架构有点迷惑。

第一个是正确的还是第二个?因为在第二张图中,每个调用都会先通过V8,然后再通过Node.js绑定,但在第一张图中,情况正好相反。你能帮我理解一下。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-29 17:15:38

首先,两个图都是正确的,尽管第一个有点过时。Node.js的异步部分过去由libev、libeio和libuv组成。然而,随着libuv在过去几年中的发展,"[in] the node-v0.9.0 version of libuv libev was removed“让libuv负责处理Node.js的整个异步I/O进程(因此当然包括事件循环)。因此,现代版本的Node.js架构将用"libuv“替换"libeio”和"libev“(如第二张图片所示)。

这两个图表在结构上不同的原因是它们是根据不同的视角进行组织的。图1表示从高级到低级的不同Node.js技术的分类(因此它并不意味着工作流);而图2是Node.js操作的实际工作流。

打个比方:假设你试图用图形来表示汽车的不同部分。您可以通过多种方式完成此操作:您可以通过分类/功能来组织不同的部分(场景A),如下所示:

  • power system:引擎,机油,冷却,排气,转向系统:齿轮箱,轴,离合器总成,差速器,差速器,
    • power system:控制臂,减震器,转向组件,etc.
    • ......

或者,您也可以通过工作流来组织这些部分(场景B):

  • 油-->发动机-->变速器-->差速器-->悬架-->等。

)我不太了解汽车的细节。组件的名称和实际的工作流程可能是错误的。它的列出只是为了帮助理解。)

现在,因为组织碎片的方式不同,它们出现的顺序也会不同。场景A类似于您的图1,场景B类似于图2。

我不确定您对Node.js的工作方式有多了解,所以在继续解释它们之间的交互方式之前,我将简要概述一下适合Node.js架构的不同部分:

  • -谷歌的开源JavaScript引擎,驻留在Chrome/Chromium浏览器中。V8不像典型的web浏览器那样在运行中解释JavaScript代码,而是将JS代码翻译成机器码,所以它非常快。V8是用C++编写的。here.
  • 最初是为了提供异步I/O而开发的,其中包括异步TCP & UDP套接字、(著名的)事件循环、异步DNS解析、文件系统读/写等。libuv是用C编写的。这里是一个很好的,可以查看以了解有关libuv低级组件的更多信息--例如c-areshttp parserOpenSSLzlib等。绑定主要是用C/C++.
  • Application编写的-这里是您的代码、模块和用built in modules编写的JavaScript (或者通过TypeScript、CoffeeScript、etc.)
  • Binding编译成JS )-绑定基本上是用一种语言编写的库的包装器,并将库暴露给用另一种语言编写的代码,以便用不同语言编写的代码可以被绑定( communicate.

现在,第一张图应该有意义了:顶部是用JavaScript编写的应用程序(模块和核心Node.js内置模块);底部是用C/C++编写的Node.js内部组件。要桥接它们以便它们可以通信,您需要绑定。这就是Node.js绑定所处的位置:位于高级应用程序和低级节点组件之间。此图不一定表示工作流;它只是根据不同Node.js部分之间的关系/功能对它们进行分类。

第二个图表示Node.js应用程序的实际工作流程。在应用程序中编写的代码将由V8进行编译。代码通过绑定与低级Node.js组件通信。在您的代码中编写的所有事件都注册到Node.js。一旦事件被触发,它们就会根据它们被触发的顺序在事件队列中排队。只要事件队列中仍有剩余的事件,事件循环就会不断地获取它们,调用它们的回调函数,并将它们发送到工作线程进行处理。一旦回调函数被执行,它的回调被再次发送到事件队列,等待被事件循环再次拾取。

您的部分困惑可能来自于第二张图中使用的技术术语的选择。如果仔细观察,下面的"NODE.JS BINDINGS“表示"(NODE API)",不幸的是,这是两个不同的东西。Node.js API是其内置库的接口,而从软件编程的角度来看,bindings是用不同语言编写的代码之间的桥梁。

我希望这能帮到你。

Node.js内部结构的一个更准确的表示是:

(我前段时间从网上下载了这张图片,我忘了它是从哪里来的。如果图片属于你,请评论,我会在下面添加信用!谢谢!)

编辑:我最近写了一篇更全面的文章,用一个简单易懂的类比来解释Node.js's architecture。我希望它能帮上忙!

票数 75
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36766696

复制
相关文章
​JS基础测试: 下列哪一项的返回值是5?
逻辑运算符用于测定变量或值之间的逻辑。除了常用的返回布尔值,也可以利用运算符的逻辑来获得我们想要的数字或枚举变量:
舒克
2019/08/09
1K0
如何正确使用Node.js事件[每日前端夜话0x4B]
事件驱动的编程变得流行之前,在程序内部进行通信的标准方法非常简单:如果一个组件想要向另外一个发送消息,只是显式地调用了那个组件上的方法。但是在 react 中用的却是事件驱动而不是调用。
疯狂的技术宅
2019/04/23
3.6K0
如何正确使用Node.js事件[每日前端夜话0x4B]
Node.js 的 trace events 架构
前言:trace 系统用于收集内核的数据,本文介绍在 Node.js 中 trace 的架构和实现,因为 Node.js 的 trace 系统是基于 V8 的,所以也会介绍 V8 部分。因为实现细节比较多,逻辑也比较复杂,有兴趣的同学可以配合源码一起阅读或者看一下前面的相关文章。
theanarkh
2022/03/30
1.3K0
Node.js 的 trace events 架构
架构师的九项绝技
在你的研究领域,有可能是孤独的,可能没有人和你一起研究,没有人和你一起讨论。也许是很枯燥的。你学到的某项技能也许没有应用场景,永远都不会被别人发现。
用户7657330
2020/08/14
3090
「无服务器架构」无服务器架构是应用程序的正确选择?考虑利弊
在前一篇关于web开发中的无服务器架构的文章中,我们讨论了为什么我们相信无服务器将是云原生开发的未来。不可否认的是,重点是无服务器架构的优势。在我们的无服务器系列的这一期中,我们将通过概述无服务器的缺点以及在哪些情况下它可能不是你的下一个应用的最佳方法来增加更多的平衡。
架构师研究会
2020/11/06
1.9K0
如何在 Node.js 中正确的使用日志对象
地址:https://mp.weixin.qq.com/s/Pb51aYdrxAALM_wR4asDgg
coder_koala
2021/08/26
1K0
如何正确选择多云架构?
多云是指企业使用两个或更多的公有云 IaaS 供应商。广义来看,混合云也在其范畴。多云架构有如下优势:
深度学习与Python
2022/04/19
5990
如何正确选择多云架构?
如何在 Node.js 中正确的使用日志对象
日志,是开发者排查问题的非常重要的手段,有时候甚至是唯一的,所以如何合理并正确的打印日志,成了开发时的重中之重。
程序狗
2022/01/04
1.2K0
Node.js VS PHP—你应该选择哪一个?
现在,WEB开发公司和开发人员可以选择多种技术栈来构建Web应用程序。早期网络发展,不同的技术被用于前端和后端开发。但是,随着Node.js的发布,布局发生了变化,因为它允许开发人员使用 JavaScript 编写后端代码。这最终催生了MEAN(MongoDB + Express +AngularJS + NodeJS )堆栈 web 开发框架,从前端到后端甚至是数据库(MongoDB -JSON)都使用 JavaScript。在 Node.js 之前,Web 开发通常是在 PHP 的帮助下完成的,
企鹅号小编
2018/01/29
1.9K0
Node.js VS PHP—你应该选择哪一个?
基于 Node.js 的 Serverless 架构实践
通过将 BFF 构建于 serverless 之上,将人工智能实验室(天猫精灵)数十个中后台应用整合到了一个统一入口。用云函数的方式取代了传统基于 NodeJS 的 BFF 层,提供了在一个站点下不同应用以及不同环境的快速切换能力。从而极大程度的降低了开发成本和运维成本,使机器数量从 200 余台缩减为 10 台,同时有效减少了业务方的学习和理解成本。
五月君
2019/12/11
1.7K0
基于 Node.js 的 Serverless 架构实践
Node.js VS PHP — 你应该选择哪一个?
PHP 和 Node.js 的基本区别在于 PHP 是一种编程语言,Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js VS PHP,哪一方可以赢得这场战争取决于你构建的网站类型。比方说,如果你想构建一个实时的聊天应用程序,那么选择 Node.js 是明智的,因为它可以轻松处理大量的客户端请求。但是,这并不意味着PHP 不可以,请看完 Node.js VS PHP 后再决定用谁构建你的网站。 1.性能 在性能方面,Node.js 显然赢了这一局。由于 N
前端教程
2018/03/05
1.2K0
揭秘 Node.js 底层架构
2009 年 Ryan Dahl 在JSConf EU大会上推出了 Node.js,最初是希望能够通过异步模型突破传统 Web 服务器的高并发瓶颈,之后愈渐发展成熟,应用越来越广,出现了繁荣的 Node.js 生态
ayqy贾杰
2020/05/09
2.3K0
什么是Node.js
Node.js 是一种建立在Google Chrome’s v8 engine上的 non-blocking (非阻塞), event-driven (基于事件的) I/O平台.
Qwe7
2022/04/20
2.1K0
什么是学习编程的正确方法
对程序员、开发人员和数据科学家的高度需求吸引了许多人加入 IT 领域。通常,初学者总要试图在学习过程中找到捷径,以便更快地谋得一份工作。
老齐
2021/09/15
1.2K0
Location配置项及LNMP架构
首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的。 1. 静态请求:请求的内容是静态文件就是静态请求 1)静态文件:文件上传到服务器,永远不会改变的文件就是静态文件 2)html就是一个标准的静态文件 1. 动态请求:请求的内容是动态的就是动态请求 1)不是真实存在服务器上的内容,是通过数据库或者其他服务拼凑成的数据
HammerZe
2022/03/25
6140
Location配置项及LNMP架构
Node.js Vs. PHP:你应该选择哪一个
现在,Web开发公司和开发人员可以选择多种技术栈来构建Web应用程序。早期网络发展,不同的技术被用于前端和后端开发。但是,随着Node.js的发布,布局发生了变化,因为它允许开发人员使用 JavaScript 编写后端代码。这最终催生了MEAN(MongoDB + Express +AngularJS + NodeJS )堆栈 web 开发框架,从前端到后端甚至是数据库(MongoDB -JSON)都使用 JavaScript。在 Node.js 之前,Web 开发通常是在 PHP 的帮助下完成的,因为它很容易与 HTML 集成,帮助开发人员立即构建动态网站。在这篇文章中,我们将比较 Node.js 和 PHP,看哪一个最适合当前的行业需求。
Debian中国
2018/12/20
9680
教你爱的正确姿势-QQ红包520项目总结
还记得几天前的520你在干什么吗?是在朋友圈争先恐后晒恩爱、晒求婚、晒结婚证结婚照,还是一边吃着狗粮一边被晒得双目失明呢?我们QQ钱包团队联合厘米秀在这一天特意奉上《520的正确操作方式:白和宝贝橘的
腾讯ISUX
2018/06/29
1.2K0
加薪方式的真相!你是哪一种?
blocks|key|1205994|text||type|atomic|depth|inlineStyleRanges|entityRanges|offset|length|data|entityMap|IMAGE|mutability|IMMUTABLE|imageUrl|https://ask.qcloudimg.com/http-save/1258501/599741a0dd168fdb672df843c3d4170d.jpeg|imageAlt^0|0|1|0^^$0|@$1|2|3|4|5|6|
程序猿DD
2022/03/28
1990
Node.js 是怎么找到模块的?
需要注意的是,"a/b" 这种不属于路径写法,它属于前两种,比如 "fs/promises"、"@babel/core"。
前端西瓜哥
2022/12/21
2.1K0
Node.js 是怎么找到模块的?
不容错过的 Node.js 项目架构
Express.js 是用于开发 Node.js REST API 的优秀框架,但是它并没有为您提供有关如何组织 Node.js 项目的任何线索。
五月君
2019/12/16
5.9K0
不容错过的 Node.js 项目架构

相似问题

以下哪一项是正确的?

22

关于这篇作文,哪一项是正确的?

13

以下哪一项是更正确的INotifyPropertyChanged实现?

10

Java MD5以下哪一项是正确的?

20

这些关于对象的陈述中,哪一项是正确的?

92
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文