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

我想在 bar.del.com 上生成一个进程,该进程没有对 foo.hyd.com 的文件系统访问权限(从我生成进程的位置),运行模块“tut”的子例程“test”。

有没有办法这样做,不向 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 shell 中的调用在所有(当前)已知节点上加载模块。也就是说,那些出现在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 回答