2016-07-26 21 views
0

我在爲子進程提供相同的模塊或對象時遇到問題。 因爲沒有辦法發送一個普通的對象到我的子進程(我只能發送「服務器」,套接字或JSON對象),我試圖創建一個模塊,我需要在我的主app.js ,在它上面設置任何必要的數據,而不是在我的子進程中,我也會要求它。Node.js - 在子進程中需要相同的模塊

問題是,在我的子進程中,我得到了一個不同的oject,而不是我在app.js.中創建的那個oject。我試圖用一個普通的對象,並設置它的屬性,以及一個功能...

//module file 
var Data = function(){ 
    this.data = null; 

    return this; 
}; 

module.exports = Data; 

...我用這樣的...

//app.js 
var module = require("moduleName")(); 
module.data = "something"; 

...然而,在我的孩子的過程中,數據仍然是空

//Child process 
var module = require("moduleName")(); 
console.log(module.data); --> null 

兩個文件(app.js和子進程的文件)都在同一個項目,和目錄。

我唯一的客串是,因爲我創造了我的子進程fork(),它可能使用的模塊不同的緩存...

那麼,有什麼辦法可以實現,得到了相同的對象在我的子進程,還是有辦法發送一個對象(而不是JSON)到我的子進程?

提前致謝!

回答

2

子進程和父進程是不同的進程 - 它們不共享內存。

您可能必須使用它們之間的某些進程間通信來同步數據,或者使用像Redis這樣的所有進程都會使用的通用服務。

您目前正在嘗試這樣做的方式是不可能的,不僅僅是在節點中。任何兩個進程都有自己的內存,它們之間發送的所有內容不會被自己共享或同步。

如果不使用像Redis這樣的服務,您可能會通過發送消息與您的進程進行通信。

child是你父進程的子進程的引用,那麼你就可以發送郵件:

child.send({some:"object"}); 

在你的孩子,你可以聽這些消息:

process.on('message', function(object) { 
    // do something with object 
    // like update your local copy 
}); 

這樣,每次對象發生變化時,父進程都可以通知其所有子進程,並向其發送新的副本。

更多信息:

+0

感謝您的快速答覆!我已經在使用兩者之間的通信線路,但是我提到的方式會更容易一些。 :-)無論如何,我會堅持那個,現在很清楚,我無法達到我提到的方式。 – Dave

+0

@Dave我用一種方式更新了一個答案,以通知子進程某些對象發生了變化,並且每次都發送新的數據。您也可以採用其他方式將數據從子進程發送到父進程。 – rsp

+0

是的,我已經在使用這種方法,但我認爲,如果我在main和子進程之間通過send和on組合進行大量的通信(主要是因爲它只有一個通道可以使用),它可能會減慢子進程,但這只是一個猜測。這就是爲什麼我想在子進程中包含一些東西(這些東西已經在我的app.js中使用),所以我可以提供一些其他的通道(比如使用我已經在應用中啓動的socket.io。 JS) – Dave

相關問題