2015-02-10 32 views
2

在Node.js應用程序中,當單個線程拋出內部服務器錯誤時,其他請求會發生什麼?Node.js - 事件循環和內部服務器錯誤

由於node.js處理單個進程中的每個請求,我想知道會發生什麼。

+0

除非您以某種方式處理內部錯誤,否則其他請求將返回500,因爲Node進程將關閉... – James 2015-02-10 16:19:10

+0

通常,這些異常會被錯誤處理捕獲並作出響應。所以,響應被髮送,並且callstack被清除,允許隊列中的下一個回調被執行。 – 2015-02-10 16:19:15

+0

這不是真的:由於node.js處理單個進程中的每個請求,我想知道會發生什麼。節點啓動1進程(除非集羣) – jmingov 2015-02-10 16:19:28

回答

0

Node.js是一個單線程進程,但是每個請求都作爲套接字句柄來處理,而不是在它自己的線程中處理。內部節點在每個打開的套接字上等待IO。如果某個請求由於某種原因產生了內部服務器錯誤,您只需回覆一個500.

如果存在未捕獲的異常(與內部服務器錯誤有點不同,但可能是您詢問的內容),這將會影響整個過程。您可以擁有一個內置的最終異常處理程序,但應該用於清理該進程並重新啓動它。所有異常都應該在代碼中乾淨地處理,您不應該依賴「uncaughtException」偵聽器來恢復進程並繼續執行。