2012-06-04 19 views
5

Wie kann ich die Module, die von einem anderen Node-Prozess geladen wurden, aus einem anderen Node-Prozess verwenden.Node.js zu Node.js Kommunikation

Beispiel I ausgeführt:

node my_modules 

die Last MyModule

dann werde ich einen weiteren NodeJS Prozess ausgeführt:

node grab_modules 

die GrabModule

GrabModule versucht laufen zu verwenden die Funktion s innen MyModule

Ist das möglich? Und wenn das möglich ist wie?

+5

nicht sicher, was Sie versuchen, hier zu tun. Bitte geben Sie ein konkreteres Beispiel für Ihr ideales Szenario an. –

+0

Die Frage könnte klarer sein, wenn Sie mich fragen. – Alfred

Antwort

7

Was Sie wollen, ist wahrscheinlich dnode:

Vom README of dnode:

der Server (die die Funktionen Hosts ausgeführt werden):

var dnode = require('dnode'); 

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

Der Client (die Funktionen auf die Anrufe Server und erhält ihre Ergebnisse in einem Rückruf)

var dnode = require('dnode'); 

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

Es hängt davon ab, was Sie versuchen zu tun.

Wenn Sie einfach dasselbe Modul (MyModule) aus zwei separaten Knotenprozessen wiederverwenden möchten, ist das ziemlich einfach. Sie müssen nur fordern ('MyModule') in GrabModule und MyModule ist zugänglich, wenn Sie grab_module ausführen.

Wenn Sie MyModule einschließlich seiner globalen Variablen zwischen zwei Prozessen "teilen" möchten, ist es viel komplexer. Sie müssen ein prozessübergreifendes Protokoll zwischen zwei Prozessen definieren (normalerweise REST über Socket) und dieses Protokoll verwenden, um in einem Prozess von einem anderen Prozess auf das Modul zuzugreifen.

0

1) Um ein Modul (Implementierung) nicht eine Instanz (Modul geladen irgendwo des Prozesses mit erfordern) in verschiedenen Prozess verwenden, müssen Sie nur dieses Modul, wo immer Sie benötigen.

Wenn Sie zwei Prozesse ausführen, z. B. Prozess A, die 'MyModule' verwenden und Prozess B, die 'GrabModule' verwenden, aber nur das 'GrabModule' in Prozess B kann auf die exportierten Eigenschaften von 'zugreifen MyModule 'dann brauchen Sie nur require (' Pfad zu MyModule ') zu verwenden.

2) Wenn Sie andererseits einen Prozess B benötigen, können Sie auf den Status eines Moduls (ein Modul, das ausgeführt wurde, weil Sie require irgendwo benötigen) eines Prozesses A zugreifen eine IPC (Interprozesskommunikation), die es erlaubt, Daten zwischen Prozess A und Prozess B auszutauschen und das gleiche Protokoll in beiden zu erstellen oder zu verwenden.

Abhängig davon, ob sich Ihr Prozess auf demselben Computer oder in einem anderen Computer befindet, können einige IPCs im selben Betriebssystem verwendet werden, wie bei nodejs mit untergeordnetem Fork (http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options) oder einem in einigen Netzwerkkanälen integrierten IPC.

Zum Beispiel können Sie verwenden, um das Publish/Subscribe-Messaging-System von Redis (http://redis.io/topics/pubsub)

0

Was dazu:

my_modules wird mit öffentlicher api (Rest api, XML-RPC wie das Programm funktioniert, ...) und grab_modules werden mit api verbunden und rufen Funktionen von my_modules

0

Wenn Sie auch Interoperabilität mit anderen Sprachen und/oder hohe Geschwindigkeit benötigen, ist ZeroMQ auch eine Option. Während ich ursprünglich eine einfache C-Bibliothek war, hatte ich gute Erfahrungen mit den NodeJS-Bindungen.

Es gibt eine ZeroMQ für fast alle gängigen Sprachen Bindung finden http://zeromq.org/bindings:_start