2013-06-27 123 views

回答

58

您必須爲兩個節點命名節點並使用相同的cookie。

在機器1:

iex --name [email protected] --cookie a_cookie_string 

在機器2:

iex --name [email protected] --cookie a_cookie_string 

現在兩臺機器可以進行通信。爲了測試它,你可以做這樣的事情,在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> 

域名machine1.commachine2.com可以與機器的IP地址被改變了。

+1

酷,這個作品! :)我已經嘗試這種方法,但使用域而不是IP地址。 非常感謝 – ChaosSteffen

+2

順便說一句:只要域名部分不同,節點名稱可以在'@'符號前相同(名稱在網絡中必須是唯一的,所以如果您的機器使用的IP地址不是這個是獨特的部分)。例如:'node @ 192.168.0.2'和'node @ 192.168.0.3'也在工作。 (剛纔提到可能會簡化與機器/節點名稱相關的代碼。) – asaaki

1

如果您嘗試通過代碼連接節點: 您需要將正在運行的代碼轉換爲分佈式節點。要做到這一點運行Node.start(:fullNameOfServer)

例如:如果你的IP是192.168.0.1,你可以有一個完整的節點名稱,如:"[email protected]"

一旦你把你的節點到分佈式節點,設置Cookie: Node.set_cookie :cookie_name

最後,您需要與遠程節點建立連接。 (您還需要遠程節點上的Node.start和Node.set_cookie) 爲此,您需要遠程節點的名稱。讓我們假設遠程節點的名稱是[email protected](假設此節點是同一本地網絡中的另一臺計算機)。執行此操作的代碼看起來像Node.connect :"[email protected]"

您現在可以運行Node.list以查看[email protected]上可用的[email protected],反之亦然。

總結以上幾點,你的代碼應該看起來像

在富機器

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]" 

上的條形碼機

Node.start :"[email protected]" 
Node.set_cookie :cookie_name