代码之家  ›  专栏  ›  技术社区  ›  ZeissS

在Erlang中动态添加节点和全局_组

  •  1
  • ZeissS  · 技术社区  · 16 年前

    Erlang支持使用 global_group 模块。 此外,Erlang还支持将节点动态添加到节点网络。这两个功能彼此可用吗?
    据我所知,您必须在启动时命名每个节点才能使用全局组。

    2 回复  |  直到 15 年前
        1
  •  1
  •   TBBle    15 年前

    看着 global_group source ,节点列表是节点同步时检查的配置的一部分。

    但是有一个导出函数 global_group:global_groups_changed 处理节点列表更改。

    这是从 kernel:config_change (见 Module:config_change/3 )因此,在版本升级(OTP嵌入式系统风格)期间,当然可以向全局\组添加新节点(请参见 "Updating Application Specifications" )

    可以 可以简单地做:

    application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
    kernel:config_change( [ { global_groups, [GroupTuple|GroupTuples] } ], [], [] )
    

    假设您已经具有全局\组配置,或者

    application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
    kernel:config_change( [], [{ global_groups, [GroupTuple|GroupTuples] }], [] )
    

    如果您正在将全局组配置为一个不存在的集群。

    您需要在每个节点上执行上述操作,如果它们决定在过程中同步,那么它们将拆分配置差异的行。(参见 global_group source 关于在版本升级期间同步)

    但一旦所有人都做到了,

    global_group:sync()
    

    应该让一切恢复正常。

    我没有试过上面的食谱,但我觉得它很好吃。^ ^ ^

        2
  •  2
  •   Jonke    16 年前

    节点是正在执行的Erlang运行时 系统已被命名, 使用命令行标志-name (长名称)或-sname(短名称)。

    隐藏节点是以 命令行标志-隐藏。 隐藏节点和之间的连接 其他节点不可传递,它们 必须显式设置。也, 隐藏节点不显示在 节点()返回的节点列表。 相反,节点(隐藏)或 必须使用节点(已连接)。这个 例如,意味着 节点将不会添加到 全局跟踪的节点。

    所以简而言之,是的,您需要给我们的节点一个名称,以便其他节点能够找到它。

    感觉你要么不试着问问题,要么有一个非常复杂的问题,也许一个你想完成的例子可以让你给出一个更好的答案。