1

Erlang 支持使用global_group模块将其节点划分为组。此外,Erlang 支持动态添加节点到节点网络。这两个功能可以互相使用吗?
据我了解,您必须在启动时命名每个节点才能使用全局组。

4

2 回答 2

2

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

隐藏节点是以命令行标志 -hidden 开头的节点。隐藏节点和其他节点之间的连接是不可传递的,它们必须明确设置。此外,隐藏节点不会出现在 nodes() 返回的节点列表中。相反,必须使用节点(隐藏)或节点(连接)。这意味着,例如,隐藏节点不会被添加到 global 正在跟踪的节点集合中。

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

感觉您要么在没有尝试的情况下提出问题,要么有一个非常复杂的问题,也许您尝试完成的示例可以提供更好的答案。

于 2008-10-25T10:50:19.070 回答
1

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

然而,有一个导出的函数global_group:global_groups_changed可以处理节点列表的变化。

这是从kernel:config_change 调用的(参见Module:config_change/3),因此在发布升级期间当然可以将新节点添加到 global_group (OTP 嵌入式系统样式)(参见“更新应用程序规范”

可以简单地

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

假设您已经有一个 global_groups 配置,或者

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

如果您将 global_groups 配置到它尚不存在的集群中。

您需要在每个节点上执行上述操作,如果他们决定在此过程中同步,他们将拆分配置差异的行。(请参阅global_group 源中有关在版本升级期间同步的评论)

但是一旦对他们所有人都这样做了,

global_group:sync()

应该让一切恢复正常。

我还没有测试过上面的食谱,但对我来说它看起来很好吃。^_^

于 2010-04-29T11:31:19.937 回答