2012-06-04 23 views
5

¿Cómo puedo usar los módulos cargados desde otro proceso de nodo desde otro proceso de nodo.Node.js a la comunicación Node.js

Ejemplo I ejecute:

node my_modules 

que carga MyModule

entonces voy a ejecutar otro proceso nodejs:

node grab_modules 

que se desarrollará GrabModule

GrabModule intentará utilizar la función s dentro de MyModule

¿Esto es posible? Y si esto es posible, ¿cómo?

+5

No está seguro de lo que estás tratando de hacer aquí. Proporcione un ejemplo más concreto de cuál sería su escenario ideal. –

+0

La pregunta podría ser más clara si me preguntas. – Alfred

Respuesta

7

Lo que se quiere es probablemente dnode:

Desde el README of dnode:

El servidor (que alberga las funciones que puede ejecutar):

var dnode = require('dnode'); 

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

El cliente (el que llama a funciones en el servidor y obtiene sus resultados en una devolución de llamada)

var dnode = require('dnode'); 

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

Depende de lo que trates de hacer.

Si simplemente desea reutilizar el mismo módulo (MyModule) desde dos procesos de nodo separados, eso es bastante fácil. Solo necesita poner require ('MyModule') en GrabModule y MyModule está accesible cuando ejecuta grab_module.

Si desea 'compartir' MyModule incluyendo sus variables globales entre dos procesos, es mucho más complejo. Debe definir un protocolo entre procesos entre dos procesos (normalmente REST sobre el socket) y usar ese protocolo para acceder al módulo en un proceso desde otro proceso.

0

1) Para utilizar un módulo (implementación) no es una instancia (módulo cargado en alguna parte del proceso usando require) en un proceso diferente, solo necesita requerir ese módulo donde lo necesite.

Si ejecuta dos procesos, por ejemplo, el proceso A que usa 'MyModule' y el proceso B que usa 'GrabModule', pero solo necesita ese 'GrabModule', en el proceso B, puede acceder a las propiedades exportadas de ' MyModule 'entonces solo necesitas usar require (' ruta a MyModule ').

2) Por otro lado, si necesita que un proceso B, pueda acceder al estado de un módulo (un módulo que se ha ejecutado, porque necesita requerir en alguna parte) de un proceso A, entonces necesita usar un IPC (comunicación entre procesos) que permite intercambiar datos entre el proceso A y el proceso B, y construir o usar el mismo protocolo en ambos, sobre él.

Dependiendo de si su proceso está en la misma máquina o en uno diferente, puede usar algo de compilación IPC en el mismo sistema operativo, como nodejs ofrecer con fork hijo (http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options) o usar un IPC integrado en algún canal de red.

Por ejemplo, se puede utilizar el sistema de publicación/suscripción de mensajería de Redis (http://redis.io/topics/pubsub)

0

Qué tal esto:

my_modules funcionarán como el programa con API pública (API REST, XML-RPC, ...) y grab_modules se conectará a las funciones api y call de my_modules

0

Si también necesita interoperabilidad con otros idiomas y/o alta velocidad, ZeroMQ también es una opción. Aunque originalmente era una biblioteca simple de C, he tenido buenas experiencias con las vinculaciones de NodeJS.

Hay un ZeroMQ vinculante para casi todos los lenguajes populares, ver http://zeromq.org/bindings:_start