5

他のノードプロセスからロードされたモジュールを別のノードプロセスから使用するにはどうすればよいですか。

私が実行する例:

node my_modules

どの負荷MyModule

次に、別のnodejsプロセスを実行します。

node grab_modules

実行されますGrabModule

GrabModule内部の機能を使用しようとしますMyModule

これは可能ですか?そして、これが可能であれば、どのように?

4

5 に答える 5

7

あなたが望むのはおそらくdnodeです:

dnodeのREADME から:

サーバー (実行する関数をホストする):

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);
    });
});
于 2012-06-04T10:21:26.203 に答える
0

1) To use a module (implementation) not an instance (module loaded somewhere of the process using require) in different process, you only need to require that module wherever you need.

If you run two process, for example, process A that use 'MyModule' and process B that use 'GrabModule', but you only need that 'GrabModule', in process B, can access to the exported properties of 'MyModule' then you only need to use require('path to MyModule').

2) On the other hand, if you need that a process B, can access to a module's state (a module that has been executed, because you use require in somewhere) of a process A, then you need to use a IPC (Inter-process communication) that allows to exchange data between process A and process B, and build or use the same protocol in both, over it.

Depending if your process are in the same machine or in different one, to can use some IPC build in the same OS, as nodejs offer with child fork (http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options) or use an IPC built in some network channel.

For example, you can use the publish/subscribe messaging system of Redis (http://redis.io/topics/pubsub)

于 2013-05-14T13:49:47.980 に答える
0

それはあなたがしようとしていることに依存します。

2 つの別々のノード プロセスから同じモジュール (MyModule) を単純に再利用したい場合、それは非常に簡単です。require('MyModule') を GrabModule に入れるだけで、grab_module を実行すると MyModule にアクセスできるようになります。

グローバル変数を含む MyModule を 2 つのプロセス間で「共有」したい場合は、さらに複雑になります。2 つのプロセス間でプロセス間プロトコル (通常はソケット経由の REST) を定義し、そのプロトコルを使用してあるプロセスのモジュールに別のプロセスからアクセスする必要があります。

于 2012-11-14T05:33:36.277 に答える