ネットワーク接続を介して2つの異なるマシンの2つのErlang/Elixirノードを接続するにはどうすればよいですか?
ノードに名前を付け、両方のノードで同じ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アドレスでも変更できます。
コードを介してノードを接続しようとしている場合:実行中のコードを分散ノードに変換する必要があります。これを行うには、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