【问题标题】:Spawn remote process w/o common file system生成没有通用文件系统的远程进程
【发布时间】:2010-12-29 02:08:13
【问题描述】:
(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”模块文件?

【问题讨论】:

  • 12 个问题,没有一个被接受...

标签: erlang distributed spawn


【解决方案1】:

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

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

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

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

【讨论】:

  • 嘿,这是有用的信息,我不知道。谢谢!
【解决方案2】:

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

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 参数仅用于跟踪模块的路径,并且它指向的文件不被本地节点服务器使用。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多