2015-12-15 65 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

相關問題