如何通过本地网络连接两个Elixir节点?

时间:2013-06-27 19:43:11

标签: elixir

如何通过网络连接连接两台不同机器的两个Erlang / Elixir节点?

2 个答案:

答案 0 :(得分:61)

您必须为节点命名,并在两个节点上使用相同的cookie。

在机器1中:

iex --name node1@machine1.com --cookie a_cookie_string

在机器2中:

iex --name node2@machine2.com --cookie a_cookie_string

现在两台机器可以通信。要测试它,你可以在machine1上执行类似的操作:

iex(node1@machine1.com)1> Node.connect :"node2@machine2.com"
true

iex(node1@machine1.com)2> print_node_name = fn -> IO.puts Node.self end
#Function<erl_eval.20.80484245>

iex(node1@machine1.com)3> Node.spawn(:"node2@machine2.com", print_node_name)
node2@machine2.com
#PID<7789.49.0> 

域名machine1.commachine2.com也可以使用机器的IP地址进行更改。

答案 1 :(得分:1)

如果您尝试通过代码连接节点: 您需要将正在运行的代码转换为分布式节点。要执行此操作,请运行Counter

例如:如果你的IP是192.168.0.1,你可以有一个完整的节点名称,如Node.start(:fullNameOfServer)

将节点转换为分布式节点后,您可以设置cookie: :"foo@192.168.0.1"

最后,您需要与远程节点建立连接。 (您还需要远程节点上的Node.start和Node.set_cookie) 为此,您需要远程节点的名称。我们假设远程节点的名称是bar@192.168.0.2(假设此节点是同一本地网络上的另一台计算机)。执行此操作的代码类似于Node.set_cookie :cookie_name

您现在可以运行Node.list以查看Node.connect :"bar@192.168.0.2"上可用的bar@192.168.0.2,反之亦然。

总结以上几点,您的代码应该类似于

在Foo机器上

foo@192.168.0.1

在条形码机上

Node.start :"foo@192.168.0.1" #this is the IP of the machine on which you run the code
Node.set_cookie :cookie_name
Node.connect "bar@192.168.0.2"