【问题标题】:Why node server has to be restart on file change?为什么节点服务器必须在文件更改时重新启动?
【发布时间】:2016-03-20 19:40:58
【问题描述】:

为什么在文件发生更改时需要重新启动 NodeJS 服务器? Apache、IIS、nginx 等其他服务器是否也需要这个,或者它们可以自动重启吗?

【问题讨论】:

  • 有助于定义服务器行为(由 Node.js 执行)的文件与服务器可能提供给客户端的文件之间存在差异。如果您要下载和修改 Apache 或 nginx 的源代码,是的,您必须重新启动(并重建)它们才能看到这些更改生效。 Node.js 正在执行的脚本也是如此。 (Node.js 不像 Apache 等那样是服务器。它是一个帮助您定义自己的服务器应用程序的平台——您自己的 Apache 等)
  • 虽然你应该明白为什么需要重启服务器,但是你可以使用nodemon来绕过这个麻烦。这是一个小脚本,可以检测文件更改并相应地重新启动服务器(对开发环境非常有帮助)。

标签: node.js server


【解决方案1】:

你没有说你在谈论哪些文件,所以我会提到几个不同类型的文件的问题。

对于构成您的 node.js 服务器的 Javascript 代码的 Javascript 文件,node.js 是一个持续运行的服务器。这意味着当服务器启动时,它会将您的 Javascript 代码解析到内存中,然后开始执行它。该服务器进程会一直运行,直到您停止它。因为 node.js 是一个持续运行的服务器,如果你想更新组成服务器代码的 Javascript 文件,你必须停止服务器并重新启动它,让它加载和重新解析新更改的源文件。

这与 PHP 与 Apache 非常不同,它为每个单独的请求从头开始运行给定的 PHP 脚本。由于没有长时间运行的 PHP 应用程序,并且每个 PHP 脚本对于每个请求都是从头开始启动的,因此它可以自动拾取新更改的 PHP 脚本,而无需重新启动 Apache 服务器。如果您有一个完全用 PHP 编写的长时间运行的服务器,那么它的行为可能与 node.js 相似。

而且,如果您想升级您的 Apache 服务器代码,您必须重新启动 Apache(与 node.js 一样)。

您可以将 node.js 视为 Apache + PHP 合二为一,因为两者的功能通常仅由 node.js 本身来满足。它将 web 服务器功能与 webapp 逻辑集成在一起,而这些功能与 Apache + PHP 是分开的。


对于由服务器提供并传送到浏览器的 HTML 文件或 Javascript 文件,您通常不必重新启动服务器,以便在后续浏览器请求中提供这些文件的新版本。但是,这在一定程度上取决于您使用的服务器框架以及它如何准确地实现文件缓存。此行为并非特定于 node.js,但会内置到您用于通过 Web 服务器提供文件的任何代码中(例如 Express 或类似的东西)。

【讨论】:

  • 感谢您提供如此简短的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
  • 2012-06-25
  • 2022-11-27
  • 2012-08-20
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多