我们可以说node.js是Web服务器吗?


92

我发现我在Web框架和Web服务器之间感到困惑。

Apache is a web server.

Tornado is a web server written in Python.

Nginx is a web server written in C

Zend is a web framework in php

Flask/Bottle is a web framework in Python

RoR is a web framework written in Ruby

Express is a web framework written in JS under Node.JS

我们可以说node.js是Web服务器吗???我对Web服务器/框架感到很困惑。

如果以某种方式node.js是一种Web服务器,而不是webframework(Express确实是),为什么在有用的实践中我们为什么需要将整个node.js放在Nginx服务器之上? 关于SO的问题

谁可以帮助???

套件


4
Tornado是一个Web服务器+一个小型Web框架。:)我认为ezpresso是正确的。实际上,Node.js是类似于Java的JRE的运行时环境。Node.js越来越多地用于非Web应用程序。除非添加,否则用Node.js编写的程序不具有Web服务器功能。当然,Node.js具有非常高级的本机功能,使您可以轻松地使用http.CreateServer(...)。listen(80)创建Web服务器。但是除非您添加此程序,否则程序中不存在Web服务器。因此,Node.js本身不是Web服务器。而是使用Node.js创建一个。
OCDev 2014年

1
严格地说,你没有需要把一个Web服务器上的Node.js的顶部-您可以将您的节点项目中写一个小服务器,并具有处理所有日常的浏览器请求,以及那些特别关注Web应用程序。但是像Web更改这样的事情可以通过Web服务器(例如Nginx)更好地处理。因此,尽管您不必将Web服务器与Node一起使用,但这样做通常更明智。
干线

C ++是网络服务器吗?不,这是一种您可以用来编写的编程语言。与node.js相同。
alfadog67

Answers:


53

网络服务器

Web服务器可以指帮助交付可以通过Internet访问的内容的硬件(计算机)或软件(计算机应用程序)。1个

Web服务器的主要功能是将请求中的网页交付给客户端。这意味着传递HTML文档和文档可能包含的任何其他内容,例如图像,样式表和脚本。

Web服务器是将请求/页面传递到Internet上的客户端/用户的基础

网络框架

Web应用程序框架是一种软件框架,旨在支持动态网站,Web应用程序和Web服务的开发。该框架旨在减轻与Web开发中执行的常见活动相关的开销。例如,许多框架提供了用于数据库访问,模板框架和会话管理的库,并且它们通常促进代码重用。

Web框架使用Web服务器将请求传递到客户端,但不是Web服务器。

Node.js

Node.js是基于Chrome的JavaScript运行时构建的平台,可轻松构建快速,可扩展的网络应用程序。Node.js使用事件驱动的非阻塞I / O模型,使其轻巧高效,非常适合跨分布式设备运行的数据密集型实时应用程序。

但是话又说回来,您也可以创建CLI应用程序,因此我认为您应该更多地将其视为使用Javascript 编程语言而不是仅仅在浏览器中编写可在服务器(计算机)上运行的javascript程序的平台。我认为您可以将其视为Javascript++??

您还可以使用node.js编写Web服务器,如在node.js的首页上所见。在一开始,Ryan说,由于项目的稳定性,您可以将Nginx放在node.js的前面。该项目过去并且现在还很年轻。Nginx是经过验证的Web服务器,它将在node.js崩溃时继续运行。然后,很多用户再次使用node.js。


6
Node.js是基于Google V8 JavaScript引擎构建的JavaScript运行时...
ozanmuyes

1
Web服务器(Apache或Nginx)如何成为硬件?
shadow0359 '17

我认为主要问题是默认情况下Node.js是否侦听HTTP端口?如果是这样,它也将其归类为HTTP服务器。
forsberg

1
我们可以说正方形是一个矩形,但并非相反。您是说Nodejs不仅仅是Web服务器吗?还是根本不代表Web服务器?
CME64

1
@ shadow0359有点晚了,但是对于其他任何人来说,Web服务器不仅仅是软件。它还可能表示物理硬件,运行该软件的计算机
Christoffer

25

我会说Node.js运行时环境或运行时引擎。

到目前为止,我可能找到的最好的定义来自Rob Gravelle的文章“ Node.js简介”

Node.js是运行时环境的一部分,也是使用服务器端JavaScript构建网络应用程序的部分库。它使用Chrome的JavaScript运行时引擎直接执行JS代码,而无需浏览器沙箱。

PCMAG.COM百科全书还提供了“运行时引擎”的以下定义

某些应用程序在计算机上运行所依赖的软件。运行时引擎必须在计算机中运行,以便应用程序执行。它提供了应用程序所需的通用例程和功能,并且通常将临时,中间语言的程序转换为机器语言。

维基百科上标题为“运行时系统”的文章还声明:

运行时系统(也称为运行时系统,运行时环境或仅运行时)实现计算机语言的基本行为,而无论该语言是编译语言,解释型语言,嵌入式领域特定语言还是通过API调用和pthreads一样。

……运行时系统可以实现任务的行为,例如在屏幕上绘制文本或建立Internet连接。它通常还充当抽象层,隐藏了操作系统提供的服务的复杂性或变化。

那么,那里是否有像Node.js这样的运行时环境(甚至是软件平台)?我猜JRE是这种环境的一个很好的例子。Node.js和JRE-它们有很多共同点。它们都具有(一种)虚拟机,类库和框架,以实现包括CLI在内的多种类型的应用程序。

因此,回到您的问题上,我们可以说Node.js是Web服务器吗?让我们将“ JRE”更改为“ Node.js”,然后回答是否JRE是Web服务器。答案是不。

我们只能说Node.js是一个运行时环境,可用于实现Web服务器。好吧,这是我的看法。


您首先忽略了该运行时的目的-以及没有使所有功能真正有用的所有模块[ nodejs.org/docs/latest-v9.x/api/]都没有用的浪费
干线

19

说节点是一个网络服务器,就像说javacript只能在浏览器中运行一样,可以这么说,但是它也可以做很多其他事情。

节点JS

  1. [JavaScript运行时环境(Chrome v8引擎)+节点库/ API]
  2. 可以创建Web服务器,也可以描述为应用程序服务器

表现

  1. Web框架(使用Node.js的Web服务器提供文件)

Nginx的

  1. 网络服务器

在生产中,大多数人在节点服务器之前将Nginx用作代理服务器,以服务静态文件和其他各种元素,例如缓存,路由等。


1
加上提到NodeJS可以同时用于Web服务器和应用程序服务器以及提及Express的功能。
Yahya

16

我将node.js归类为服务器框架,并提供可用的软件包,这些软件包可以将其用作HTTP服务器,WebSocket服务器或您自己的自定义协议等。

之所以将nginx放在node.js服务器的前面,是为了在运行服务器应用程序的多台计算机之间实现HTTP负载平衡和反向代理。


1
是。Web框架可帮助您编写Web应用程序,该Web应用程序将HTML和JavaScript用于UI,并通过HTTP进行通信。Web框架的示例是Express(适用于node.js)或Django(适用于Python)。
cmv 2012年

所有尝试的最佳答案。+1。
干线

我猜坚持ngnix不会是合适的解决方案,我们可以使用hs代理来实现负载平衡解决方案
Kartikeya Sharma

@cmv对不起,我迟到了!!!您是否需要将nginx放在节点前面,但要在其上放置负载均衡器?我是否可以将负载均衡器放在EC2实例的前面,并完成它以使其直接进入节点并表示端点?
lopezdp '19

4

我感觉到你的痛苦!

和许多人一样,我发现很难理解Node.js的本质,因为大多数人只写/谈论他们认为有用的Node部分-他们发现有趣的部分通常是Node的次要利益,而不是其主要利益。目的。我必须说,我认为让人们说Node只是一个JavaScript运行时很疯狂。Node对JavaScript的使用及其对V8运行时的选择,只是达到最终目的的最佳工具,它是Node开发人员想要解决的问题的最佳工具。

Node的主要目的是提高Web应用程序中用户事件的管理效率。所以Node是压倒性的用于网络应用程序的后端。事件管理要求某些东西正在服务器上监听这些用户事件。因此,必须设置http服务器以将每个事件路由到其相应的处理程序脚本。Node提供了一个框架,用于快速设置服务器以在专用端口上侦听用户请求。Node使用JavaScript进行事件处理,因为JavaScript具有回调功能:这允许暂停一个任务,直到返回从属任务的结果。很少有其他语言具有此功能,并且那些语言可能没有像Google V8运行时那样高效的解释器。大多数Web开发人员都知道JavaScript,因此Node不需要额外的语言学习。此外,具有回调功能允许将所有用户任务放在单个线程上无需将显式阻止应用于要求访问数据库或文件系统的任务。这就是在大量并发使用下导致Node优越的执行效率的原因,这是其开发的主要目的。

为了帮助Node用户快速写出后端代码,Node的开发人员还组织了一个内置的JS库来执行例行任务(例如与HTTP请求,字符串(反)编码,流等有关的事项)和NPM(Node Package Manager)存储库:这是一组开源的,用户维护的脚本包,用于各种标准和自定义功能。所有Node项目均允许通过已建立的npm install 命令将NPM软件包导入到项目中。

通过Node处理的用户请求将是Web应用所需的东西,例如身份验证,数据库查询,内容管理(Strapi CMS)等。所有这些都将发送到Node端口。(在这种情况下,从数据库获取数据的分析需要大量的CPU时间,这种类型的过程最好放在单独的线程上,这样就不会减慢简单的用户请求。)其他类型的用户请求,例如加载另一个网页,下载CSS / JS /图像文件等内容,将继续由浏览器发送到Web服务器程序(Apache,NGinx等)将用于处理它们的服务器计算机上的默认端口。

因此,在实践中,Node原则上是用于快速创建服务器和处理事件的框架,但仅替代Web服务器程序的某些功能。

Node的其他非后端用途只是利用其一项或多项功能,例如V8引擎。例如,前端构建工具Grunt和Gulp使用Node.js处理可被编码为将SASS转换为CSS,最小化CSS / JS文件,优化图像大小/加载等的构建脚本。但是这种工作确实是只是Node的副产品用途,而不是其主要用途,Node的主要用途是为Web应用程序创建高效的后端流程。


2

Web服务器是通过协议通过互联网为其客户提供服务的产品,而Web Framework是我们称为编译器的产品。它包含所有必需的库,语法规则等。

而node.js是一个框架!


2
但是Node是否不包括旨在使用户能够快速编写自己的服务器的模块(例如http)?
干线

1

我认为问题在于,“ Web服务器”或“ Web应用程序服务器”的术语受JEE世界和产品的支配,而这些产品的模块化程度不如当今的Javascript世界框架,而后者又可以或多或少地组合在一起自由地。

我不明白为什么一个技术,能够满足复杂的应用程序通过网络,应该不会被称为Web服务器或Web应用程序服务器!

如果结合使用,比如说Nuxt作为前端,而Feathers作为后端-您将拥有一个提供REST API和服务器端渲染UI的后端!

当然,您可以(错误地)使用它来提供静态内容-然后我将其称为Web服务器,或者您可以使用它来制作和提供完整的应用程序-然后将其称为Web应用程序服务器。

组合起来的特征或品质可以满足一个目的-对吗?-诸如稳定性,可伸缩性之类的功能会随着时间的流逝而逐渐添加到这些技术中。目前,它们还很新。


0

我只是第一次使用Node.js创建Discord机器人。我的想法是“哇,Node.js是服务器?我认为它是JS库!” 也许我本可以将其视为框架。

它是网络服务器吗?不,但是您可以用它做一个。是服务器吗?如在接收查询并提供结果的软件中一样?是。

就我而言,我发出了以下命令: node index.js

现在,Node.js正在等待请求响应(通过我的机器人)。它是服务器,但不提供网页服务。


-1

不,它是一个运行时环境...因此它不是Web服务器,但不需要运行。所以可能这就是为什么它可能造成混淆的原因。它可以独立运行,而无需任何Web服务器,因为它本身是运行时,但又不是Web服务器。


1
我认为这个答案-尽管从技术上讲是正确的-但太简短了,对新手来说并不能提供很多信息。
干线
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.