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 [email protected] --cookie a_cookie_string
En la máquina 2:
iex --name [email protected] --cookie a_cookie_string
Ahora las dos máquinas se pueden comunicar. Para probarlo, puede hacer algo como esto, en machine1:
iex([email protected])1> Node.connect :"[email protected]"
true
iex([email protected])2> print_node_name = fn -> IO.puts Node.self end
#Function<erl_eval.20.80484245>
iex([email protected])3> Node.spawn(:"[email protected]", print_node_name)
[email protected]
#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 :"[email protected]"
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 [email protected] (suponiendo que este nodo sea otra computadora en la misma red local). El código para hacer esto se parece a Node.connect :"[email protected]"
Ahora puede ejecutar Node.list para ver la [email protected]
disponible en [email protected]
y viceversa.
Resumiendo los puntos anteriores, su código debería verse algo así como
En la máquina Foo
Node.start :"[email protected]" #this is the IP of the machine on which you run the code
Node.set_cookie :cookie_name
Node.connect "[email protected]"
En la máquina de Bar
Node.start :"[email protected]"
Node.set_cookie :cookie_name