2016-07-26 3 views
0

동일한 모듈 또는 객체를 내 하위 프로세스에 제공하는 데 문제가 있습니다. 정상적인 객체를 자식 프로세스로 보낼 방법이 없으므로 ("서버", 소켓 또는 JSON 객체 만 보낼 수 있음), 내 기본 app.js에 필요한 모듈을 만들려고했습니다. , 그것에 필요한 데이터를 설정하고 내 자녀 과정에서, 나는 그것을 필요로합니다.Node.js - 하위 프로세스에서 동일한 모듈 필요

문제는 내 자식 프로세스에서 다른 응용 프로그램을 얻는 것입니다. 응용 프로그램에서 만든 객체가 아닙니다 .js. 난 ...이처럼 사용할 것을 ...

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

    return this; 
}; 

module.exports = Data; 

를 일반 객체를 사용하고의 속성뿐만 아니라 기능을 설정

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

을 시도 ... 같은 프로젝트 및 디렉토리에 있지만 내 자식 과정에서 데이터가 여전히 두 파일 (app.js와 자식 프로세스의 파일)

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

널입니다.

내 유일한 gues

내가 fork() 내 자식 프로세스를 생성하기 때문에,이 모듈에 대해 다른 캐시 ...

그래서 내가 얻을 수있는 방법이를 사용하여 내 자식 프로세스에서 같은 오브젝트를 받고 있습니다입니다 , 또는 자식 프로세스에 객체 (JSON 아님)를 보내는 방법이 있습니까?

미리 감사드립니다.

답변

2

하위 프로세스와 상위 프로세스는 서로 다른 프로세스이며 메모리를 공유하지 않습니다.

데이터를 동기화하기 위해 프로세스 간 통신을 사용하거나 모든 프로세스에서 사용할 수있는 Redis와 같은 공통 서비스를 사용해야합니다.

노드 에서뿐만 아니라 현재 시도하는 방식이 불가능합니다. 두 프로세스 모두 자체적 인 메모리를 가지며 자신간에 보내는 모든 것은 공유되거나 동기화되지 않습니다.

Redis와 같은 서비스를 사용하지 않으면 메시지를 보내 프로세스와 통신 할 수 있습니다. 자녀에

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

당신이 그 메시지를 수신 할 수 있습니다 :

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

child

는 부모 프로세스에서 자식 프로세스에 대한 참조, 다음으로 메시지를 보낼 수있다 그렇게하면 부모 프로세스는 개체가 변경 될 때마다 모든 하위 프로세스에 알리고 새 복사본을 보낼 수 있습니다.

더 많은 정보 : 빠른 응답을위한

+0

감사합니다! 이미 두 사람 사이의 통신 회선을 사용하고 있지만 언급 한 방식이 조금 쉬울 것입니다. :-) 어쨌든, 내가 언급 한대로 달성 할 수 없다는 것을 분명히 밝혀 둔다. – Dave

+0

@Dave 일부 개체가 변경되었다는 것을 자식 프로세스에 알리고 매번 새로운 데이터를 보내는 방법으로 응답을 업데이트했습니다. 다른 방법으로 돌아가서 하위 프로세스에서 부모에게 데이터를 보낼 수도 있습니다. – rsp

+0

네, 이미이 방법을 사용하고 있습니다 만, 기본 및 자식 프로세스 간 통신과 보내기 및 콤보를 통한 통신이 많은 경우 (그리고 주로 하나의 채널이므로 사용), 그것은 자식 프로세스를 느리게 할 수도 있지만 그것은 단지 추측이다. 그래서 (이미 내 app.js에서 사용중인) 자식 프로세스에 몇 가지를 포함시키고 싶었 기 때문에 다른 몇 가지 채널을 제공 할 수있었습니다 (이미 내 앱에서 실행 한 socket.io를 사용하는 것과 같습니다). js) – Dave