當文件發生變化時,爲什麼需要重啓NodeJS服務器?像Apache,IIS,nginx等其他服務器是否也需要這樣的服務器,或者它們能夠自動重啓?爲什麼節點服務器必須重新啓動文件更改?
回答
你不說你正在談論哪些文件,所以我會提及幾個不同類型的文件的問題。
對於構成您的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或類似的東西)。
感謝您的簡要解釋。 – rajagopalx
- 1. 爲什麼更新mysql用戶權限後必須重新啓動服務?
- 2. 更新htaccess文件後是否必須重新啓動服務器
- 3. 更改登錄密碼後是否必須重新啓動mysql服務器?
- 4. 節點 - 編輯特定文件後重新啓動服務器
- 5. 編輯節點js文件而不重新啓動服務器
- 6. 重新啓動後發生服務器修改,爲什麼?
- 7. 更改.js文件時,Node.js不會重新啓動服務器?
- 8. tomcat服務器:Tomcat服務器是否必須每天重新啓動?
- 9. 爲什麼移動設備必須定期檢查服務器的更新?
- 10. 爲什麼Android Debug Bridge(adb)必須經常重新啓動?
- 11. 爲什麼我必須重新啓動Django的fastcgi進程?
- 12. docker-compose.yml:爲什麼重新啓動「否」必須帶引號?
- 13. 爲什麼Gulp在重新啓動Angular服務器時還原所有更改?
- 14. 爲什麼我必須重新啓動我的服務器之後db:重置在rails?
- 15. 用更改的文件重新啓動節點子進程
- 16. 更改節點服務器
- 17. 自動重新啓動節點服務器
- 18. 在Node.js中更新文件而不重新啓動服務器
- 19. 爲什麼Servlet,.html文件在服務器重啓後沒有更新?
- 20. 爲什麼更新模型文件時服務器需要重啓?
- 21. 爲什麼必須安裝Windows服務?
- 22. (Rails)重新加載「lib」文件而不必重新啓動服務器...?
- 23. 必須在更改PATH後重新啓動
- 24. 重新啓動服務器後重新啓動WCF服務
- 25. 爲什麼我總是需要重新啓動Rails服務器?
- 26. 爲什麼我在更新路由或任何靜態文件後必須重新啓動playframework
- 27. Erlang新手:爲什麼我必須重新啓動才能加載新代碼
- 28. 無法使用節點服務器/ index.js重新啓動我的服務器
- 29. 無法重新啓動節點服務器
- 30. 使節點服務器重新啓動證明
有助於定義服務器行爲(由Node.js執行)的文件與服務器可能爲客戶端提供的文件之間存在差異。如果您要下載並修改Apache或nginx的源代碼,那麼您必須重新啓動(並重新生成)它們才能看到這些更改的生效。 Node.js正在執行的腳本也是如此。 (Node.js與Apache等不是一個服務器,它可以幫助你定義自己的服務器應用程序 - 你自己的Apache等) –
雖然你應該明白爲什麼服務器需要重新啓動,你可以使用[nodemon](https://www.npmjs.com/package/nodemon)繞過這個麻煩。這是一個小腳本,用於檢測文件更改並相應地重啓服務器(對開發環境非常有用)。 – Matt