我正在尝试实现一个非常简单的示例,以便首先了解分布式Erlang 。所以,我在同一台机器上启动两个节点:
erl -sname dilbert
erl -sname dogbert
任务是dogbert
使用节点dilbert
上的简单Hello, World!
使fun () -> io:format("Hello, World!") end
输出dilbert
。我认为使用dogbert
的shell会很容易:
(dogbert@centraldogma.fubar)1> spawn(dilbert, fun () -> io:format("HELLO!") end).
<0.39.0>
=ERROR REPORT==== 13-Jun-2012::17:49:04 ===
** Can not start erlang:apply,[#Fun<erl_eval.20.82930912>,[]] on dilbert **
在同一个shell中,使用nodes().
输出[]
。好吧,dogbert
显然不知道dilbert
,但为什么会这样呢?或者,如何让分布式erlang中的节点相互了解?
答案 0 :(得分:4)
有两个问题:
您必须为两个节点设置一个公共cookie,以便它们可以进行交互。
erl -sname dilbert -setcookie pointyhairedboss
erl -sname dogbert -setcookie pointyhairedboss
您必须指定要连接的节点的主机名。 spawn('dogbert @ yourhostname',fun() - &gt; io:format(“HELLO!”)end)。