tutorial - elixir también se buscó
¿Cómo conectar dos nodos Elixir a través de la red local? (2)
¿Cómo puedo conectar dos nodos Erlang / Elixir de dos máquinas diferentes a través de una conexión de red?
Debe nombrar sus nodos y usar la misma cookie en ambos nodos.
En la máquina 1:
iex --name node1@machine1.com --cookie a_cookie_string
En la máquina 2:
iex --name node2@machine2.com --cookie a_cookie_string
Ahora las dos máquinas se pueden comunicar. Para probarlo, puede hacer algo como esto, en 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>
Los nombres de dominio machine1.com
y machine1.com
se pueden cambiar también con las direcciones IP de las máquinas.
Si intenta conectar nodos por código: debe convertir su código de ejecución en un nodo distribuido. Para hacer esto, ejecute Node.start(:fullNameOfServer)
.
Por ejemplo: si su IP es 192.168.0.1, puede tener un nombre de nodo completo como :"foo@192.168.0.1"
Una vez que convierte su nodo en un nodo distribuido, configura la cookie: Node.set_cookie :cookie_name
Finalmente, debe establecer una conexión con el nodo remoto. (También necesita Node.start y Node.set_cookie en el nodo remoto) Para hacer esto, necesita el nombre del nodo remoto. Supongamos que el nombre del nodo remoto es bar@192.168.0.2 (suponiendo que este nodo sea otra computadora en la misma red local). El código para hacer esto se parece a Node.connect :"bar@192.168.0.2"
Ahora puede ejecutar Node.list para ver la bar@192.168.0.2
disponible en foo@192.168.0.1
y viceversa.
Resumiendo los puntos anteriores, su código debería verse algo así como
En la máquina 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"
En la máquina de Bar
Node.start :"bar@192.168.0.2"
Node.set_cookie :cookie_name