Jak mogę połączyć dwa węzły Erlang/Elixir dwóch różnych maszyn przez połączenie sieciowe?Jak połączyć dwa węzły Elixir za pośrednictwem sieci lokalnej?
Odpowiedz
Musisz nazwać swoje węzły i użyć tego samego pliku cookie na obu węzłach.
W maszynie 1:
iex --name [email protected] --cookie a_cookie_string
W maszynie 2:
iex --name [email protected] --cookie a_cookie_string
Teraz obie maszyny mogą komunikować. By to sprawdzić, można zrobić coś takiego, na komputera Komputer1:
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>
Domeny machine1.com
i machine2.com
można zmienić za pomocą adresów IP maszyn, jak również.
Jeśli próbujesz połączyć węzły za pomocą kodu: Musisz zmienić swój kod operacyjny na węzeł rozproszony. Aby to zrobić, uruchom Node.start(:fullNameOfServer)
.
Np: jeśli Twój IP to 192.168.0.1, można mieć pełną nazwę węzła jak :"[email protected]"
Po włączeniu węzła do węzła rozproszonego można ustawić ciasteczko: Node.set_cookie :cookie_name
Wreszcie, musisz ustanowić połączenie ze zdalnym węzłem. (Musisz również Node.start i Node.set_cookie na zdalnym węźle) Aby to zrobić, potrzebujesz nazwy zdalnego węzła. Załóżmy, że nazwa zdalnego węzła to [email protected] (zakładając, że węzeł jest innym komputerem w tej samej sieci lokalnej). Kod tego robić, wygląda Node.connect :"[email protected]"
Teraz można uruchomić Node.list aby zobaczyć [email protected]
dostępny na [email protected]
i vice versa.
Podsumowując powyższe punkty, Twój kod powinien wyglądać mniej więcej tak
Na komputerze 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]"
Na komputerze Bar
Node.start :"[email protected]"
Node.set_cookie :cookie_name
cool, to działa! :) Już próbuję tego podejścia, ale użyłem domen zamiast adresów IP. Bardzo dziękuję – ChaosSteffen
BTW: Nazwy węzłów mogą być takie same przed znakiem @, dopóki część nazwy domeny jest inna (nazwy muszą być unikalne w sieci, więc jeśli używasz adresów IP dla swoich maszyn, to jest unikalną częścią). Przykład: działa również 'node @ 192.168.0.2' i' node @ 192.168.0.3'. (Wspomniałem tylko, że może uprościć twój kod związany z nazwami komputerów/węzłów). – asaaki