Spawn远程进程没有通用文件系统

时间:2009-12-22 11:48:51

标签: erlang distributed spawn

(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”模块文件?

3 个答案:

答案 0 :(得分:4)

您可以使用以下函数在远程节点加载模块而不提供文件本身:

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不使用它指向的文件。

答案 1 :(得分:3)

我将您的问题解释为不希望将* .beams从您的文件系统复制到远程文件系统。

如果您只是在测试内容,可以使用erl shell中的nl(Mod)调用在所有(当前)已知节点上加载模块。也就是那些出现在nodes()

中的那些

这将发送代码并从内存副本加载它,它不会将其存储在远程文件系统中。

您也可以使用slave模块启动远程节点。从服务器访问其主服务器的文件系统和代码服务器。当您调用test:tut/2函数时,普通的自动加载将确保模块存在于从模块中。

答案 2 :(得分:0)

您可以将本地代码发送到远程节点:

> {Mod, Bin, File} = code:get_object_code(Module).
> rpc:call(RemoteNode, code, load_binary, [Mod, File, Bin]).