4
(nodeA@foo.hyd.com)8> spawn(nodeA@bar.del.com, tut, test, [hello, 5]).

モジュール「tut」のサブルーチン「test」を実行して、foo.hyd.com へのファイル システム アクセスを持たない bar.del.com でプロセスを生成したいと考えています (ここからプロセスを生成しています)。

nodeA@bar.del.com にコンパイル済みの「tut」モジュール ファイルを提供せずに、そうする方法はありますか?

4

3 に答える 3

5

次の関数を使用して、ファイル自体を提供せずにリモート ノードでモジュールをロードできます。

load_module(Node, Module) ->
    {_Module, Bin, Filename} = code:get_object_code(Module), 
    rpc:call(Node, code, load_binary, [Module, Filename, Bin]).

引数に記載されているようにcode:load_binary/3 Filename、モジュールへのパスを追跡するためにのみ使用され、それが指すファイルはローカル node_server によって使用されません。

于 2009-12-22T12:44:49.953 に答える
4

あなたの質問は、あなたのファイル システムからリモート ファイル システムに *.beams をコピーしたくないという願望だと解釈しています。

何かをテストするだけの場合はnl(Mod)、erl シェルで呼び出しを使用して、(現在) 既知のすべてのノードにモジュールをロードできます。つまり、 に表示されるものですnodes()

これにより、コードが送信され、メモリ コピーから読み込まれます。リモート ファイルシステムには保存されません。

slaveモジュールを使用してリモートノードを起動することもできます。スレーブは、マスターのファイル システムとコード サーバーにアクセスします。通常の自動ロードは、関数を呼び出すときにモジュールがスレーブに存在することを確認しますtest:tut/2

于 2009-12-22T13:38:52.747 に答える
0

ローカル コードをリモート ノードに送信できます。

> {Mod, Bin, File} = code:get_object_code(Module).
> rpc:call(RemoteNode, code, load_binary, [Mod, File, Bin]).
于 2009-12-22T12:44:10.610 に答える