2013-06-27 11 views

答えて

58

ノードに名前を付け、両方のノードで同じCookieを使用する必要があります。機械1において

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

機2において:

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

すぐ2台のマシンが通信することができます。それをテストするには、あなたがこのような何かを行うことができ、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

BTW:ドメイン名の部分が異なる限り、ノード名は '@ '記号の前で同じにすることができます(名前はネットワーク内で一意でなければなりません。ユニークな部分です)。例: 'node @ 192.168.0.2'と' node @ 192.168.0.3'も動作しています。 (マシン/ノード名に関連するコードを単純化するためにちょうど言及されています)。 – asaaki

1

コードでノードを接続しようとしている場合: 実行中のコードを分散ノードにする必要があります。これを行うにはNode.start(:fullNameOfServer)を実行します。

例:、最後に Node.set_cookie :cookie_name

:あなたのIPが192.168.0.1であれば、あなたは分散ノードにあなたのノードの電源を入れたら、あなたはクッキーを設定:"[email protected]"

のような完全なノード名を持つことができますリモートノードとの接続を確立する必要があります。 (リモートノードのNode.startとNode.set_cookieも必要です) これを行うには、リモートノードの名前が必要です。リモートノードの名前が[email protected]であると仮定します(このノードは同じローカルネットワーク上の別のコンピュータであると仮定します)。これを行うコードは、Node.connect :"[email protected]"

のようになります。ノード番号リストを実行して[email protected][email protected]で利用できるようになりました。その逆も同様です。

上記の点をまとめると、あなたのコードは、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]" 

バー・マシンで

Node.start :"[email protected]" 
Node.set_cookie :cookie_name 
関連する問題