Как я могу подключить два узла Erlang/Elixir двух разных компьютеров через сетевое соединение?
Как подключить два узла Elixir через локальную сеть?
Ответ 1
Вы должны называть свои узлы и использовать один и тот же файл 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.com
и machine2.com
могут быть изменены с помощью IP-адресов машин.
Ответ 2
Если вы пытаетесь подключить узлы через код:
Вам нужно превратить ваш код в распределенный node. Для этого выполните Node.start(:fullNameOfServer)
.
Например: если ваш IP-адрес 192.168.0.1, вы можете иметь полное имя Node, например :"[email protected]"
Как только вы превратите свой Node в распределенный node, вы установите cookie:
Node.set_cookie :cookie_name
Наконец, вам необходимо установить соединение с удаленным node. (Вам также необходимо node.start и node.set_cookie на пульте дистанционного управления node).
Для этого вам потребуется удаленное имя Node. Предположим, что удаленное имя Node - [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