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

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

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

在机器1中:

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

在机器2中:

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

现在这两台机器可以通信。 为了testing它,你可以在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地址进行更改。

如果您尝试通过代码连接节点:您需要将正在运行的代码转换为分布式节点。 为此,运行Node.start(:fullNameOfServer)

例如:如果你的IP是192.168.0.1,你可以有一个完整的节点名称,如:"foo@192.168.0.1"

一旦将节点转变为分布式节点,就可以设置Cookie: Node.set_cookie :cookie_name

最后,您需要与远程节点build立连接。 (您还需要远程节点上的Node.start和Node.set_cookie)为此,您需要远程节点的名称。 让我们假设远程节点的名字是bar@192.168.0.2(假设这个节点是同一本地networking中的另一台计算机)。 执行此操作的代码看起来像Node.connect :"bar@192.168.0.2"

现在可以运行Node.list来查看bar@192.168.0.2上的foo@192.168.0.1 ,反之亦然。

总结以上几点,你的代码应该看起来像这样

在Foo机器上

 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" 

在酒吧机器上

 Node.start :"bar@192.168.0.2" Node.set_cookie :cookie_name