【问题标题】:How to connect two Elixir nodes via local network?如何通过本地网络连接两个 Elixir 节点?
【发布时间】:2013-06-25 11:16:46
【问题描述】:

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

【问题讨论】:

    标签: elixir


    【解决方案1】:

    您必须为节点命名并在两个节点上使用相同的 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地址。

    【讨论】:

    • 酷,这行得通! :) 我已经尝试过这种方法,但使用域而不是 IP 地址。非常感谢
    • BTW:@ 符号前的节点名称可以相同,只要域名部分不同(名称在网络中必须是唯一的,所以如果您使用 IP 地址为您的机器比这是独特的部分)。示例:node@192.168.0.2node@192.168.0.3 也在工作。 (刚才提到可能会简化与机器/节点名称相关的代码。)
    【解决方案2】:

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

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

    一旦你把你的节点变成一个分布式节点,你就设置了 cookie: Node.set_cookie :cookie_name

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

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

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

    在 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
    

    【讨论】:

      猜你喜欢
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2018-02-21
      • 1970-01-01
      • 2013-11-13
      • 2020-12-17
      • 2020-07-15
      相关资源
      最近更新 更多