使用Node.js服務器,我想知道是否可以並推薦從委託工作進程,而不是主進程。這些工作進程可以是Node.js服務器本身,也可以是通過IPC進行通信的Node.js子進程。「使用Node.js進行直接響應」 - 使用不同的Node.js進程發送HTTP響應(與主進程不同)
我不認爲集羣核心模塊https://nodejs.org/api/cluster.html可以做我想做的事情,因爲在該模型中,所有工作人員都在同一個端口上偵聽,並且他們代表主進程處理所有請求。我在尋找的是一個主要的Node.js進程,它響應所有HTTP請求,可能執行身份驗證並處理一些請求,但也能夠將數據密集型或CPU密集型請求委派給工作池。
想象一下,我們有大量數據的GET請求,比如2-3MBs。
我們具有至少3分可能的情況:
- 主進程接收請求,要求輸入大量數據的數據庫,然後將數據發送回給請求者。
- 主進程接收到請求,使用IPC向工作進程發送一些數據,工作人員從數據庫獲取數據進行一些繁重的操作,然後工作人員使用IPC將所有3MB數據發送回主過程,然後發送迴應。
- 主進程接收請求,向工作人員發送儘可能少量關於請求流的信息,工作人員完成所有工作,工作人員發回HTTP響應。
我對製作#3可能特別好奇。
方案3的簡單描述低於:
(只是要清楚,我不想對一個請求3個迴應,我只是想表明,工人也可能代表主流程發送響應)。
任何人都知道這可能與Node.js一起工作?它如何在其他語言中起作用?通常,我對Node.js併發模型沒有任何問題,但對於某些類型的數據,使用Cluster模塊可能不是實現最高併發水平的最佳方式。
我相信這個模型的一個術語是「直接響應」,意思是工作人員直接響應請求。也許可以簡單地爲此使用羣集核心模塊https://nodejs.org/api/cluster.html。
不久前我有點類似的想法,但經過大量的搜索後,我最終使用nginx作爲負載平衡器,看起來像你想要實現的,但沒有旋轉整個應用程序。如果有人有任何問題,我也有興趣瞭解解決方案。 – shriek
當然,謝謝,我認爲cluster.setupMaster可能能夠做我想做的事,但我還不確定,請參閱:https://nodejs.org/api/cluster.html#cluster_cluster_setupmaster_settings –
例如,請參閱接受答案在這裏:http://stackoverflow.com/questions/23771516/using-cluster-in-a-node-module/24463511#comment59142347_24463511 –