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

问题描述 投票:71回答:8

我发现我在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服务器,而不是Web框架(Express确实如此),为什么我们需要将整个node.js放在Nginx服务器之上? qazxsw poi

谁可以帮忙???

套件

node.js webserver web-frameworks
8个回答
48
投票

Question on SO

Web服务器可以指硬件(计算机)或软件(计算机应用程序),它们有助于提供可通过Internet访问的内容.Web server

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

Web服务器是向Internet上的客户端/用户提供请求/页面的基础

1

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

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

Web framework

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

但是你又可以创建CLI应用程序,所以我认为你应该把它看作是一个平台来编写javascript程序,使用Node.js Javascript在服务器(计算机)上运行,而不是像开头一样在浏览器中运行。我想你可以把它看作programming language

你也可以用node.js编写带有node.js的web服务器,你可以在node.js的首页看到。起初Ryan说你可以把Javascript++放在node.js的前面,因为项目的稳定性。该项目过去并且还很年轻。 Nginx是经过验证的Web服务器,它将继续运行,而node.js可能会崩溃。然后,很多用户只是使用node.js。


20
投票

我会说NginxNode.js或运行引擎。

到目前为止,我发现的最佳定义可能来自Rob Gravelle的一篇名为Runtime Environment的文章:

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

此外,PCMAG.COM百科全书提供了“运行时引擎”的"An Intro to Node.js"

某些应用程序依赖的软件在计算机中运行。运行时引擎必须在计算机中运行才能执行应用程序。它提供了应用程序所需的常用例程和函数,它通常将程序(使用临时中间语言)转换为机器语言。

同样名为“运行时系统”的following definition声明:

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

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

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

那么,回到你的问题,我们可以说Node.js是一个Web服务器吗?让我们为“JRE”更改“Node.js”并回答JRE是否为Web服务器。答案是不。

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


14
投票

说节点是一个Web服务器就像说javascript只能在浏览器内运行,你可以这么说但它也可以做很多其他事情。

的NodeJS

  1. [Javascript运行环境(Chrome v8引擎)+节点库/ API]
  2. 可以创建Web服务器,也可以称为Application服务器

表达

  1. Web框架(使用nodejs的web服务器来提供文件)

Nginx的

  1. 网络服务器

在生产中,大多数人在节点服务器前面使用Nginx作为代理服务器来提供静态文件和其他各种元素,如缓存,路由等。


13
投票

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

您可以将nginx放在node.js服务器前面的原因是为了在运行服务器应用程序的多台计算机上进行HTTP负载平衡和反向代理。


2
投票

Web服务器是通过互联网协议为客户服务的东西,而Web Framework就像我们称之为编译器。它包含所有必需的库,语法规则等。

而node.js是一个框架!!


1
投票

我认为问题在于“网络服务器”或“网络应用程序服务器”的术语由JEE世界和产品组成,这些产品不像今天的框架Javascript世界那样模块化,而这些框架可以或多或少地组合在一起自如。

我认为没有理由认为可以通过Web服务复杂应用程序的技术不应该被称为Web服务器或Web应用程序服务器!

如果你结合起来,让我们说Wikipedia article作为前端,Nuxt作为后端 - 你将有一个后端服务REST API和服务器端呈现的UI!

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

它总结为服务目的的综合特征或品质 - 对吧? - 稳定性,可扩展性等功能是恕我直言,随着时间的推移将添加到这些技术。就目前而言,它们仍然是新的。


0
投票

不,它是一个运行时环境...所以它不是一个Web服务器,但它不需要运行。所以这可能是令人困惑的原因。它可以独立运行而无需任何Web服务器,因为它本身就是运行时,但它又不是Web服务器。


0
投票

我多么感受到你的痛苦!

像许多人一样,我发现很难理解Node.js的本质,因为大多数人只会编写/谈论他们觉得有用的Node部分 - 而他们觉得有趣的部分通常是Node的第二个好处,而不是它的主要部分。目的。我必须说,我认为人们说Node只是一个JavaScript运行时很疯狂。 Node对JavaScript的使用 - 以及它对V8运行时的选择 - 只是达到目的的手段,是Node开发人员想要解决的问题的最佳工具。

Node的主要目的是使Web应用程序中的用户事件管理更加高效。因此Node绝大多数用在Web应用程序的后端。事件管理要求在服务器计算机上侦听这些事件。因此,必须设置http服务器以将每个事件路由到其适当的处理程序脚本。 Node使用JavaScript进行事件处理,因为JavaScript具有回调函数:这允许暂停一个任务,直到返回依赖任务的结果。没有多少其他语言具有此功能,而那些可能没有像Google的V8运行时那样高效的解释器。大多数Web开发人员都了解JavaScript,因此没有其他语言学习Node。更重要的是,具有回调函数允许将所有用户任务放在单个线程上,而不会将明确的阻塞应用于要求访问数据库或文件系统的任务。这就是导致Node在重度并发使用下具有卓越执行效率的原因 - 这是其发展的主要目的。

为了帮助Node用户快速回写最终代码,Node的开发人员还组织了NPM(节点包管理器)存储库:这是一个用于各种标准和自定义函数的开源,用户驱动的脚本包集。所有Node项目都允许通过已建立的npm install命令将NPM包导入项目。

通过Node处理的用户请求将是诸如注册/登录/注销/表单字段验证之类的事情,并且Web应用程序所需的各种数据库查询将被发送到节点端口。其他类型的用户请求,例如显示另一个网页,下载CSS / JS /图像等,也可以发送到Node。但这些通常不会被发送到Node端口,但会继续由浏览器发送到Web服务器将处理它们的服务器机器上的默认端口。

因此,实际上,Node通常是一个服务器,但只能替换Web服务器程序的某些功能。 Node的其他用途只是利用其中一个或另一个特征,例如, V8发动机。但这些只是Node的副产品使用。

© www.soinside.com 2019 - 2024. All rights reserved.