Làm cách nào để kết nối hai nút Erlang/Elixir của hai máy khác nhau thông qua kết nối mạng?Làm thế nào để kết nối hai nút Elixir qua mạng cục bộ?
Trả lời
Bạn phải đặt tên cho các nút của mình và sử dụng cùng một cookie trên cả hai nút.
Trong máy 1:
iex --name [email protected] --cookie a_cookie_string
Trong máy 2:
iex --name [email protected] --cookie a_cookie_string
Bây giờ hai máy có thể giao tiếp. Để kiểm tra, bạn có thể làm điều gì đó như thế này, trên 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>
Tên miền machine1.com
và machine2.com
có thể được thay đổi với các địa chỉ IP của các máy là tốt.
Nếu bạn đang cố gắng kết nối Nút qua mã: Bạn cần phải bật mã đang chạy của mình thành nút được phân phối. Để làm điều này chạy Node.start(:fullNameOfServer)
.
Ví dụ: nếu IP của bạn là 192.168.0.1, bạn có thể có một tên Node đầy đủ như :"[email protected]"
Khi bạn bật nút của bạn vào một nút phân tán, bạn thiết lập các cookie: Node.set_cookie :cookie_name
Cuối cùng, bạn cần thiết lập kết nối với Nút từ xa. (Bạn cũng cần phải Node.start và Node.set_cookie trên nút điều khiển từ xa) Để thực hiện việc này, bạn cần tên của nút từ xa. Giả sử tên của nút từ xa là [email protected] (giả sử Node này là một máy tính khác trên cùng một mạng cục bộ). Mã để làm điều này, trông giống như Node.connect :"[email protected]"
Bây giờ bạn có thể chạy Node.list để xem [email protected]
có sẵn trên [email protected]
và ngược lại.
Khái quát những điểm nêu trên, mã của bạn sẽ giống như
Trên máy 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]"
Trên máy Bar
Node.start :"[email protected]"
Node.set_cookie :cookie_name
mát, công trình này! :) Tôi đã thử phương pháp này nhưng sử dụng tên miền thay vì địa chỉ ip. Cảm ơn rất nhiều – ChaosSteffen
BTW: Tên nút có thể giống nhau trước khi ký hiệu '@' miễn là phần tên miền khác (tên phải là duy nhất trong mạng, vì vậy nếu bạn sử dụng địa chỉ IP cho máy của mình hơn là phần duy nhất). Ví dụ: 'node @ 192.168.0.2' và' node @ 192.168.0.3' cũng đang hoạt động. (Chỉ cần đề cập đến có thể đơn giản hóa mã của bạn liên quan đến tên máy/nút.) – asaaki