gpt4 book ai didi

javascript - Node.js "server"与 Nginx 或 Apache 服务器相比如何?

转载 作者:IT老高 更新时间:2023-10-28 21:51:18 27 4
gpt4 key购买 nike

我最近一直在研究 Node.js,并且偶然发现了一些关于编写基于 Node.js 的简单服务器的资料。比如下面的。

var express = require("express"),
http = require("http"), app;

// Create our Express-powered HTTP server
// and have it listen on port 3000
app = express();
http.createServer(app).listen(3000);

// set up our routes
app.get("/hello", function (req, res) {
res.send("Hello World!");
});

app.get("/goodbye", function (req, res) {
res.send("Goodbye World!");
});

现在,虽然我似乎理解了代码中发生了什么,但我对术语有点困惑。当我听到服务器这个词时,我会想到 Apache 或 Nginx 之类的东西。我习惯于将它们视为可以容纳我的 Web 应用程序的容器。 Node.js 服务器与 Nginx/Apache 服务器有何不同?基于 Node.js 的服务器(即代码)是否仍然可以放置在 Nginx 之类的东西中运行?那为什么都叫“服务器”呢?

最佳答案

它是一个服务器,是的。

node.js Web 应用程序是一个成熟的 Web 服务器,就像 Nginx 或 Apache。

您确实可以在不使用任何其他 Web 服务器的情况下为您的 node.js 应用程序提供服务。只需将您的代码更改为:

app = express();
http.createServer(app).listen(80); // serve HTTP directly

确实,一些项目使用 node.js 作为其他服务器(包括 Apache)的前端负载平衡器。

请注意,node.js 并不是唯一这样做的开发堆栈。 Go、Java 和 Swift 中的 Web 开发框架也可以做到这一点。

为什么?

一开始是CGI。 CGI 很好,工作正常。 Apache 会收到一个请求,发现该 url 需要执行一个 CGI 应用程序,执行该 CGI 应用程序并将数据作为环境变量传递,读取标准输出并将数据返回给浏览器。

问题是它很慢。当 CGI 应用程序是一个小型静态编译的 C 程序但一组小型静态编译的 C 程序变得难以维护时,这没关系。所以人们开始用脚本语言写作。然后这变得难以维护,人们开始开发面向对象的 MVC 框架。现在我们开始遇到麻烦了 - 每个请求都必须编译所有这些类并创建所有这些对象以提供一些 HTML,即使没有任何动态可以提供服务(因为框架需要确定没有任何动态可以提供服务)。

如果我们不需要在每个请求中创建所有这些对象怎么办?

这是人们的想法。试图解决这个问题产生了几种策略。最早的方法之一是将解释器直接嵌入到 Web 服务器中,例如 Apache 中的 mod_php。编译的类和对象可以存储在全局变量中,因此可以缓存。另一种策略是进行预编译。另一种策略是将应用程序作为常规服务器进程运行,并使用 FastCGI 等自定义协议(protocol)与 Web 服务器通信。

然后一些开发人员开始简单地使用 HTTP 作为他们的应用程序->服务器协议(protocol)。实际上,该应用程序也是一个 HTTP 服务器。这样做的好处是您不需要实现任何新的、可能有错误的、可能未经测试的协议(protocol),并且您可以直接使用 Web 浏览器(或者通常是 curl)调试您的应用程序。而且您不需要经过修改的 Web 服务器来支持您的应用程序,只需任何可以进行反向代理或重定向的 Web 服务器即可。

为什么要使用 Apache/Nginx?

当您为 node.js 应用程序提供服务时,请注意您是您自己的 Web 服务器的作者。您的应用程序中的任何潜在错误都是互联网上可直接利用的错误。有些人(有理由)对此感到不舒服。

在您的 node.js 应用程序前面添加一个 Apache 或 Nginx 层意味着您在实时互联网上拥有一个经过实战考验、安全加固的软件,作为您应用程序的接口(interface)。它增加了一点延迟(反向代理),但大多数人认为这是值得的。

这曾经是 node.js 早期的标准建议。但是现在也有一些网站和 Web 服务将 node.js 直接暴露在互联网上。 http.Server模块现在在互联网上经过了相当好的实战测试,值得信赖。

关于javascript - Node.js "server"与 Nginx 或 Apache 服务器相比如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38821947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com