2012-06-04 2 views
5

다른 노드 프로세스에서로드 한 모듈을 다른 노드 프로세스에서 어떻게 사용할 수 있습니까?Node.js에서 Node.js 로의 통신

예 나는 실행

node my_modules 

하는 부하 MyModule

나는 다른 nodejs 프로세스를 실행합니다 :

node grab_modules 

GrabModule

GrabModule를 사용하려고 시도합니다 실행됩니다 함수 안쪽에 MyModule

가능합니까? 그리고 이것이 가능한 방법이라면?

서버 (기능을 호스팅 실행할 수) : 당신이 원하는 무엇

+5

http://zeromq.org/bindings:_start을 볼 수 없습니다 당신이 여기서 뭘하려고하는지 확인합니다. 자신의 이상적인 시나리오가 무엇인지 구체적으로 제시하십시오. –

+0

당신이 나에게 묻는다면 그 질문은 더 분명해질 수 있습니다. – Alfred

답변

7

아마 dnode 경우 : README of dnode에서

var dnode = require('dnode'); 

var server = dnode({ 
    zing : function (n, cb) { cb(n * 100) } 
}); 
server.listen(5050); 

온 함수를 호출 클라이언트 (서버에 연결하여 콜백으로 결과를 얻음)

var dnode = require('dnode'); 

dnode.connect(5050, function (remote) { 
    remote.zing(66, function (n) { 
     console.log('n = ' + n); 
    }); 
}); 
0

당신이하려는 일에 달려 있습니다.

두 개의 개별 노드 프로세스에서 동일한 모듈 (MyModule)을 단순히 다시 사용하려는 경우 매우 간단합니다. grab_module을 실행할 때 require ('MyModule')를 GrabModule에 넣으면 MyModule에 액세스 할 수 있습니다.

두 프로세스간에 전역 변수를 포함하여 MyModule을 '공유'하려면 훨씬 더 복잡합니다. 두 프로세스 (일반적으로 REST를 통한 REST) ​​간 프로세스 간 프로토콜을 정의하고이 프로토콜을 사용하여 다른 프로세스에서 한 프로세스의 모듈에 액세스해야한다.

0

1) 다른 프로세스에서 인스턴스 (모듈은 require를 사용하여 프로세스의 어딘가에로드 됨)가 아닌 모듈 (구현)을 사용하려면 필요할 때마다 해당 모듈을 요구하기 만하면됩니다.

'MyModule'과 'GrabModule'을 사용하는 프로세스 B를 사용하는 프로세스 A와 같은 두 프로세스를 실행하지만 프로세스 B에서 'GrabModule'만 필요하면 내 보낸 속성 ' MyModule '그러면 require ('MyModule에 대한 경로 ') 만 사용해야합니다.

2) 반면에 프로세스 B가 필요하다면 프로세스 A의 모듈 상태 (실행 된 모듈, 어딘가에서 요구를 사용하기 때문에)에 액세스 할 수 있습니다. 프로세스 A와 프로세스 B간에 데이터를 교환하고 두 프로토콜 모두에서 동일한 프로토콜을 구축하거나 사용할 수있는 IPC (프로세스 간 통신).

프로세스가 동일한 시스템에 있거나 다른 시스템에있는 경우 nodejs가 하위 포크 (http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options)를 제공하거나 일부 네트워크 채널에 내장 된 IPC를 사용하므로 동일한 OS에서 일부 IPC 빌드를 사용할 수 있는지 여부에 따라 다릅니다.

예를 들어, 레디 스의 공개/등록 메시징 시스템 (http://redis.io/topics/pubsub)이 약

0

무엇 사용할 수 있습니다

my_modules는 공개 API와 프로그램으로 작동합니다 (나머지 API, XML-RPC를, ...) 및 grab_modules는 my_modules에서 API에 연결하고 함수를 호출합니다.

0

다른 언어 및/또는 고속도와의 상호 운용성이 필요한 경우 ZeroMQ도 옵션입니다. 원래 C 라이브러리 였지만 NodeJS 바인딩에 대한 좋은 경험이 있습니다.

가 거의 모든 인기있는 언어에 대한 바인딩 ZeroMQ는