Come posso collegare due nodi Erlang/Elixir di due macchine diverse tramite la connessione di rete?Come connettere due nodi Elixir tramite la rete locale?
risposta
È necessario assegnare un nome ai nodi e utilizzare lo stesso cookie su entrambi i nodi.
In macchina 1:
iex --name [email protected] --cookie a_cookie_string
In macchina 2:
iex --name [email protected] --cookie a_cookie_string
Ora le due macchine possono comunicare. Per provarlo, si può fare qualcosa di simile, il 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>
nomi di dominio machine1.com
e machine2.com
può essere modificato con gli indirizzi IP delle macchine pure.
Se si sta tentando di connettere i nodi tramite codice: È necessario trasformare il codice in esecuzione in un nodo distribuito. Per eseguire questa operazione, eseguire Node.start(:fullNameOfServer)
.
Ad esempio: se il vostro IP è 192.168.0.1, si può avere un nome nodo completo come :"[email protected]"
Una volta che si accende il nodo in un nodo di distribuzione, è possibile impostare il cookie: Node.set_cookie :cookie_name
Infine, è necessario stabilire una connessione con il nodo remoto. (È necessario anche Node.start e Node.set_cookie sul nodo remoto) Per fare ciò, è necessario il nome del nodo remoto. Supponiamo che il nome del nodo remoto sia [email protected] (supponendo che questo Nodo sia un altro computer sulla stessa rete locale). Il codice per eseguire questa operazione è Node.connect :"[email protected]"
È ora possibile eseguire Node.list per vedere lo [email protected]
disponibile su [email protected]
e viceversa.
Riassumendo i punti di cui sopra, il codice dovrebbe essere simile a
Sulla macchina 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]"
Sulla macchina Bar
Node.start :"[email protected]"
Node.set_cookie :cookie_name
fredda, questo funziona! :) Ho già provato questo approccio ma ho usato i domini invece degli indirizzi IP. Grazie mille – ChaosSteffen
BTW: i nomi dei nodi possono essere gli stessi prima del simbolo '@ 'finché la parte del nome del dominio è diversa (i nomi devono essere univoci nella rete, quindi se si usano gli indirizzi IP per le macchine di questo è la parte unica). Esempio: 'node @ 192.168.0.2' e' node @ 192.168.0.3' sta funzionando. (Appena citato per forse semplificare il tuo codice relativo ai nomi di macchine/nodi.) – asaaki