web-dev-qa-db-ja.com

ローカルネットワーク経由で2つのElixirノードを接続するにはどうすればよいですか?

ネットワーク接続を介して2つの異なるマシンの2つのErlang/Elixirノードを接続するにはどうすればよいですか?

51
ChaosSteffen

ノードに名前を付け、両方のノードで同じ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.comおよびmachine2.comはマシンのIPアドレスでも変更できます。

63

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

例:IPが192.168.0.1の場合、完全なNode :"[email protected]"のような名前を付けることができます

ノードを分散ノードに変えたら、Cookieを設定します:Node.set_cookie :cookie_name

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

これで、Node.listを実行して、[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
1
adityah