2016-04-28 40 views
3

什麼決定了Node.js應用程序是否繼續運行?什麼決定了Node.js應用程序是否繼續運行?

當代碼是這樣的:

console.log('Hello World'); 

這句話將被打印和應用程序將立即退出。

但有時當我們有一個像監聽它的Web服務器一樣的東西繼續工作。

確定應用程序是否繼續運行的一般規則是什麼?它是與事件循環有關還是類似的東西?

+0

你還沒有結束管道,或給了一個Reponse.End假設你聽着你的意思是一個像node.js應用程序的路由器,你可以給一個代碼保持運行的例子嗎? –

+0

您需要某種讓應用程序保持活動狀態的進程。 'setInterval(function(){console.log(「Hello World。」)},1000);' – hampusohlsson

+0

https://github.com/mafintosh/why-is-node-running – dude

回答

0

我不認爲事件循環與保持服務器運行有任何關係。當你期望通過http發出一些請求時,你必須收聽用戶請求的某個端口。除非您想停止從您的用戶請求您的服務器,否則您必須不斷收聽。

另一方面事件循環是當user-1發送請求您的服務器接受請求並開始對它進行處理的東西。但是,由於node.js它沒有保持端口......它一直在聽。當user-2發送請求時,服務器接受請求並開始處理請求,如user-1所做的那樣。當您的服務器完成user-1's請求時,它會向用戶1發送必要信息的響應。它會爲user-2做同樣的事情。但是如果服務器在完成user-1's請求之前完成了user-2's請求的處理,它將發送user-2響應,然後到user-1

現在想想千位的請求,會有一個回送迴應的循環。該循環稱爲事件循環。

希望這個答案很有意義。謝謝!!

3

事件循環是(部分)負責進程被節點保持開放。

簡而言之,事件循環通過對事件循環中的事件進行代碼排隊來實現,只要有事件排隊,進程就不會存在。一旦所有事件都耗盡並且代碼已經完成運行,默認情況下,該進程將在那裏存在,因爲沒有更多代碼需要運行,並且沒有更多要處理的事件。

「在後臺工作」的任何事情實際上是爲事件循環處理一個事件,並檢查它是否完成。有些東西(如http服務器和各種事件發射器)將導致進程永遠不會退出。

+0

是的,你說得對。我認爲這讓我的回答部分錯誤。事件循環是不是按照我所說的方式工作? –

+0

您的回答詳細介紹了事件循環的另一面(它是如何使事情看起來並行的),它雖然正確,但與「爲什麼會阻止進程終止?」這個問題無關。 –

+0

這個答案並不完全準確。當隊列中還有事件時,節點不會停止,但即使它是空的,它有時會*停止,有時甚至不會。這真是有趣的事情。 – Bergi

相關問題