如何分发Erlang进程(主管行为)?

如何分发Erlang进程(主管行为)?,erlang,otp,erlang-supervisor,Erlang,Otp,Erlang Supervisor,我有一个Erlang应用程序,它运行一个主管行为。现在我想把它分布在不同的节点上,这意味着受监督的进程应该在不同的计算机上运行 虽然我阅读了OTP文档,但我还没有掌握如何配置我的应用程序来实现这一点 当前,.app文件如下所示: {application, my_application, [{description, "My Description"}, {vsn, "1"}, {modules, [my_application, my_supervisor, supervised_proc

我有一个Erlang应用程序,它运行一个主管行为。现在我想把它分布在不同的节点上,这意味着受监督的进程应该在不同的计算机上运行

虽然我阅读了OTP文档,但我还没有掌握如何配置我的应用程序来实现这一点

当前,
.app
文件如下所示:

{application, my_application,
[{description, "My Description"},
 {vsn, "1"},
 {modules, [my_application, my_supervisor, supervised_process, my_monitor]},
 {registered, [my_supervisor]},
 {applications, [kernel, stdlib]},
 {mod, {my_application,[]}},
 {env, [{file, "/usr/local/log"}]}
]}.

如果有两台名为Erlang VM的计算机在运行,如何配置应用程序在这两台计算机上运行一些受监督的\u进程?

一旦每个Erlang VM使用相同的Erlang cookie在相同的内部网络上运行,您可以使用模块检查另一个节点是否存在,以及模块是否在它们之间通信

以下是检查另一个节点是否响应并向其发送同步消息的示例:

 Remote = app2@localhost,
 pong = net_adm:ping(Remote),
 ok = rpc:call(Remote, supervised_process, do_something, []).

据我所知,不能让一个节点上的主管在另一个节点上监督流程。您只能通过消息控制其他节点。

您完全可以监视/链接其他节点上的进程。考虑到了解网络连接中真正发生了什么的挑战,这是否是一个明智的想法是一个单独的问题。哇,我不知道。我想我应该检查一下spawn和monitor的文档。macintux:但是我想我不能仅仅通过配置远程节点就依靠VM透明地完成这项工作。我必须访问代码中的配置,对吗?实际上在使用OTP supervisor时,是supervisor进程生成了受监督的进程。因此,这不是创建链接的可能性问题,而是由主管在其他节点上启动和重新启动进程的问题。建议阅读《细线》中的内容。