我发现我在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是某种网络服务器,而不是webframework(Express确实如此),为什么我们需要将整个node.js放在Nginx服务器上? Question on SO
谁能帮忙???
袋
答案 0 :(得分:43)
Web服务器可以指硬件(计算机)或 有助于提供内容的软件(计算机应用程序) 可以通过互联网访问。1
Web服务器的主要功能是在网页上提供网页 要求客户。这意味着交付HTML文档和任何 文档可能包含的其他内容,例如图像, 样式表和脚本。
网络服务器是向互联网上的客户/用户提供请求/页面的基础
Web应用程序框架是一个设计的软件框架 支持动态网站,Web应用程序和 网页服务。该框架旨在减轻相关的开销 在Web开发中执行常见活动。例如,很多 框架提供了用于数据库访问,模板化的库 框架和会话管理,它们通常会促进代码重用。
Web框架使用Web服务器将请求传递给客户端,但它不是Web服务器。
Node.js是一个基于Chrome JavaScript运行时的平台,可轻松实现 构建快速,可扩展的网络应用。 Node.js使用了 事件驱动的非阻塞I / O模型,使其轻量级 高效,非常适合运行的数据密集型实时应用程序 跨分布式设备。
但是你又可以创建CLI应用程序,所以我认为你应该把它看作是一个平台来编写javascript程序,使用Javascript programming language而不是仅仅在你的服务器(计算机)上运行浏览器在开头。我想你可以把它看作Javascript++
??
您还可以使用node.js编写Web服务器,如node.js首页所示。起初,Ryan说你可以将Nginx放在node.js前面,因为项目的稳定性。该项目过去并且还很年轻。 Nginx是经过验证的Web服务器,它将继续运行,而node.js可能会崩溃。然后,很多用户只是使用node.js。
答案 1 :(得分:19)
我会说Node.js是Runtime Environment或运行时引擎。
到目前为止,我发现的最佳定义可能来自Rob Gravelle的一篇名为"An Intro to Node.js"的文章:
Node.js是使用服务器端JavaScript构建网络应用程序的部分运行时环境和部件库。它使用Chrome的JavaScript运行时引擎直接执行JS代码,而无需浏览器沙箱。
此外,PCMAG.COM百科全书提供了following definition的“运行时引擎”:
某些应用程序依赖于在计算机中运行的软件。运行时引擎必须在计算机中运行才能执行应用程序。它提供了应用程序所需的常用例程和函数,它通常将程序(使用中间语言)转换为机器语言。
同样名为“运行时系统”的Wikipedia article声明:
运行时系统(也称为运行时系统,运行时环境或仅运行时)实现计算机语言的基本行为,无论语言是编译语言,解释语言,嵌入式域特定语言,还是被调用通过API和pthreads一起使用。
...运行时系统可以实现任务的行为,例如在屏幕上绘制文本或建立Internet连接。它通常还充当抽象层,隐藏操作系统提供的服务的复杂性或变化。
嗯,那里有Node.js这样的运行时环境(甚至是软件平台)吗?我猜JRE就是这种环境的一个很好的例子。 Node.js和JRE - 它们有许多共同之处。它们都有(一种)虚拟机,类库和框架来实现许多类型的应用程序,包括CLI。
所以,回到你的问题,我们可以说Node.js是一个Web服务器吗?让我们为“JRE”更改“Node.js”并回答JRE是否为Web服务器。答案是否定的。
我们可以说的是,Node.js是一个可用于实现Web服务器的运行时环境。嗯,这是我的看法。
答案 2 :(得分:13)
我将node.js归类为服务器框架,可用的包可以将其用作HTTP服务器,WebSocket服务器或您自己的自定义协议等。
您可能将nginx放在node.js服务器前面的原因是为了在运行服务器应用程序的多台计算机上进行HTTP负载平衡和反向代理。
答案 3 :(得分:13)
说节点是一个网络服务器就像说javacript只能在浏览器中运行,你可以说但是它也可以做很多其他事情。
在制作中,大多数人在节点服务器前面使用Nginx作为代理服务器来提供静态文件和其他各种元素,如缓存,路由等。
答案 4 :(得分:2)
Web服务器是通过互联网通过协议服务其客户端的东西,而Web Framework就像我们称之为编译器。它包含所有必需的库,语法规则等。
node.js是一个框架!!
答案 5 :(得分:0)
我认为问题在于“网络服务器”或“网络应用程序服务器”的术语由JEE世界和产品组成,这些产品不像今天的框架Javascript世界那样模块化,而这些框架又可以组合在一起或多或少地自由。
我认为没有理由认为可以通过网络服务复杂应用程序的技术不称为Web服务器或Web应用程序服务器!
如果你合并,让我们说Nuxt作为前端,Feathers作为后端 - 你将有一个后端服务于REST API和服务器端呈现的UI!
当然,您可以(误)使用它来提供静态内容 - 然后我将其称为Web服务器,或者您可以使用它来制作和提供完整的应用程序 - 然后我将其称为Web应用程序服务器
总结起来达到目的的综合特征或品质 - 对吧? - 稳定性,可扩展性等功能是恕我直言,随着时间的推移将添加到这些技术。现在,它们仍然是新的。
答案 6 :(得分:0)
否,这是一个运行时环境...因此,它不是Web服务器,但不需要运行。因此,可能这就是为什么它可能令人困惑。它可以独立运行,而不需要任何Web服务器,因为它本身是运行时,但又不是Web服务器。
答案 7 :(得分:0)
我如何感觉到你的痛苦!
像许多人一样,我发现很难理解Node.js的本质,因为大多数人只写/谈论他们认为有用的Node部分,而他们发现有趣的部分通常是Node的次要好处,而不是而不是其主要目的。我必须说,我认为人们说Node只是一个JavaScript运行时是很疯狂的。 Node对JavaScript的使用及其对V8运行时的选择只是达到目的,是解决Node开发人员想要解决的问题的最佳工具。
Node的主要目的是提高Web应用程序中用户事件的管理效率。因此,在Web应用程序的后端上大量使用了Node。事件管理要求某些东西正在服务器计算机上监听这些事件。因此,必须设置http服务器以将每个事件路由到其相应的处理程序脚本。 Node使用JavaScript进行事件处理,因为JavaScript具有回调功能:这允许暂停一个任务,直到返回从属任务的结果。很少有其他语言具有此功能,那些语言可能没有Google V8运行时有效的解释器。大多数Web开发人员都知道JavaScript,因此Node不需要额外的语言学习。更重要的是,具有回调函数允许将所有用户任务放在单个线程上,而无需对要求访问数据库或文件系统的任务进行显式阻塞。这就是导致在大量并发使用下Node优越的执行效率的原因,这是其开发的主要目的。
为帮助Node用户快速写出最终代码,Node的开发人员还组织了NPM(Node Package Manager)存储库:这是一个开源的,用户驱动的脚本包,用于各种标准和自定义功能。所有Node项目均允许通过已建立的 npm install 命令将NPM软件包导入到项目中。
通过Node处理的用户请求将是注册/登录/注销/表单字段验证之类的内容,Web应用程序所需的各种数据库查询将发送到Node端口。其他类型的用户请求,例如以显示另一个网页,下载CSS / JS /图像等,也可以发送到Node。但是这些通常不会发送到Node端口,而是会继续被浏览器发送到Web服务器将在其上处理它们的服务器计算机上的默认端口。
因此,在实践中,Node通常是一台服务器,但仅替换Web服务器程序功能中的 some 个。 Node的其他用途只是利用其一项或多项功能,例如V8引擎。但是这些实际上只是Node的副产品。
答案 8 :(得分:0)
我第一次使用Node.js创建Discord机器人。我的想法是“哇,Node.js是服务器吗?我以为是JS库!”也许我可以考虑将其作为框架。
它是Web服务器吗?不,但是您可以用它做一个。 是服务器吗?如在接收查询并提供结果的软件中一样?是的。
对于我来说,我已经发出了命令:
node index.js
现在,Node.js正在等待请求响应(通过我的机器人)。它是服务器,但不提供网页。