2012-06-04 15 views
5

Come utilizzare i moduli caricati da altri processi Nodo da un altro processo di nodo.Node.js alla comunicazione Node.js

Esempio corro:

node my_modules 

cui carico MyModule

allora io eseguire un altro processo nodejs:

node grab_modules 

che durerà GrabModule

GrabModule tenterà di utilizzare la funzione s all'interno MyModule

È possibile? E se questo è possibile come?

+5

Non sei sicuro di quello che stai cercando di fare qui. Si prega di fornire un esempio più concreto di quale sarebbe il tuo scenario ideale. –

+0

La domanda potrebbe essere più chiara se me lo chiedi. – Alfred

risposta

7

Ciò che si vuole è probabilmente dnode:

Dal README of dnode:

Il server (che ospita le funzioni da eseguire):

var dnode = require('dnode'); 

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

Il client (che chiama le funzioni sul server e ottiene i risultati in una richiamata)

var dnode = require('dnode'); 

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

Dipende da cosa stai cercando di fare.

Se si desidera semplicemente riutilizzare lo stesso modulo (MyModule) da due processi di nodo separati, è abbastanza semplice. Hai solo bisogno di mettere require ('MyModule') in GrabModule e MyModule è accessibile quando esegui grab_module.

Se si desidera "condividere" MyModule incluse le sue variabili globali tra due processi, è molto più complesso. È necessario definire un protocollo tra processi tra due processi (in genere REST su socket) e utilizzare tale protocollo per accedere al modulo in un processo da un altro processo.

0

1) Per utilizzare un modulo (implementazione) non un'istanza (modulo caricato da qualche parte del processo utilizzando require) in processi diversi, è necessario solo richiedere quel modulo in qualsiasi momento.

Se si esegue due processi, per esempio, processo A che utilizzano 'MyModule' e il processo di B che utilizzano 'GrabModule', ma è necessario solo che 'GrabModule', nel processo di B, può accedere alle proprietà esportati di ' MyModule 'quindi devi solo usare require (' path to MyModule ').

2) D'altra parte, se avete bisogno che un processo B, può accedere allo stato di un modulo (un modulo che è stato eseguito, perché si utilizzano richiedere in qualche parte) di un processo di A, quindi è necessario utilizzare un IPC (comunicazione tra processi) che consente di scambiare dati tra il processo A e il processo B, e costruire o utilizzare lo stesso protocollo in entrambi, su di esso.

A seconda che il processo si trovi nello stesso computer o in uno diverso, è possibile utilizzare alcuni build IPC nello stesso sistema operativo, come nodejs con fork figlio (http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options) o utilizzare un IPC integrato in alcuni canali di rete.

Ad esempio, è possibile utilizzare il sistema publish/subscribe messaging di Redis (http://redis.io/topics/pubsub)

0

Che dire di questo:

my_modules funzioneranno come il programma con API pubblica (API REST, XML-RPC, ...) e grab_modules si connetteranno a api e chiameranno funzioni da my_modules

0

Se si richiede anche l'interoperabilità con altre lingue e/o alta velocità, ZeroMQ è anche un'opzione. Pur essendo originariamente una semplice libreria C, ho avuto esperienze positive con i binding NodeJS.

C'è uno ZeroMQ vincolante per quasi tutte le lingue popolari, vedi http://zeromq.org/bindings:_start