2015-12-15 49 views
2

当文件发生变化时,为什么需要重启NodeJS服务器?像Apache,IIS,nginx等其他服务器是否也需要这样的服务器,或者它们能够自动重启?为什么节点服务器必须重新启动文件更改?

+3

有助于定义服务器行为(由Node.js执行)的文件与服务器可能为客户端提供的文件之间存在差异。如果您要下载并修改Apache或nginx的源代码,那么您必须重新启动(并重新生成)它们才能看到这些更改的生效。 Node.js正在执行的脚本也是如此。 (Node.js与Apache等不是一个服务器,它可以帮助你定义自己的服务器应用程序 - 你自己的Apache等) –

+0

虽然你应该明白为什么服务器需要重新启动,你可以使用[nodemon](https://www.npmjs.com/package/nodemon)绕过这个麻烦。这是一个小脚本,用于检测文件更改并相应地重启服务器(对开发环境非常有用)。 – Matt

回答

4

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

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

这与Apache之类的PHP有很大的不同,它从头开始为每个单独的请求运行给定的PHP脚本。由于没有长时间运行的PHP应用程序,并且每个PHP脚本都是从头开始为每个请求启动的,因此它可以在不重新启动Apache服务器的情况下自动选择新更改的PHP脚本。如果你有一个完全用PHP编写的长时间运行的服务器,那么它可能会具有与node.js类似的行为。

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

您可以将node.js视为Apache + PHP,因为两者的功能通常都是由node.js自身完成的。它将Web服务器功能与Web应用程序逻辑集成在一起,而与Apache + PHP分开。


对于由服务器提供服务,并交付给浏览器的HTML文件或JavaScript文件,则一般不必重新启动服务器,这些文件的最新版本在随后的浏览器请求送达。但是,这取决于您正在使用哪个服务器框架以及它如何实现文件缓存。这种行为并不是特定于node.js,而是将其内置于您用于通过Web服务器提供文件的任何代码中(例如Express或类似的东西)。

+0

感谢您的简要解释。 – rajagopalx

相关问题