【问题标题】:How to code load modules on all nodes in Distributed Erlang?如何在分布式 Erlang 的所有节点上编写加载模块?
【发布时间】:2020-04-05 02:15:15
【问题描述】:

我正在学习 Erlang/OTP,在第 14 章中它说:

"您可以使用 shell 命令将模块加载到所有节点:command nl(Mod)"。

我想知道,如何做到这一点?我找不到 shell 命令:command nl(Mod)

【问题讨论】:

    标签: erlang erlang-shell


    【解决方案1】:

    您尝试在 shell 中输入help().?此函数在 stdlib 中的 c module 中定义。但是shell会理解nl(Mod).

    要进行测试,请启动至少两个 erlang vm 并连接它:

    erl -pa your_module_path -name first@127.0.0.1
    erl -name second@127.0.0.1
    

    在第一个 shell 中通过以下方式连接到第二个节点:

    net_kernel:connect('second@127.0.0.1').
    

    应该回复true

    your_module_path 创建一些简单的模块,例如:

    -module(nl_test).
    -export([test/0]).
    test() -> 1.
    

    并通过c(nl_test). 编译它现在您可以从第一个shell 运行nl_test:test() 但第二个shell 无法加载它。要广播它并强制加载,只需从第一个 nl(nl_test). 运行现在尝试从第二个 shell nl_test:test()

    假设您将test() -> 1. 修改为test() -> 2.,您只需运行c(nl_test), nl(nl_test). 或更短的nc(nl_test),这意味着相同。

    所有连接节点上的nl_test:test(). 应返回2

    这看起来很简单,但在复杂的生产系统中,正确的热加载是相当高级的问题。

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 2011-10-18
      • 2013-08-12
      • 1970-01-01
      • 2014-06-15
      • 2011-01-12
      • 2018-06-18
      • 2013-02-26
      • 2020-03-17
      相关资源
      最近更新 更多