2013-06-27 14 views

risposta

58

È 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.

+1

fredda, questo funziona! :) Ho già provato questo approccio ma ho usato i domini invece degli indirizzi IP. Grazie mille – ChaosSteffen

+2

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

1

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 
Problemi correlati