2016-02-15 17 views
9

Người ta có thể init một nút Elixir bởi IEX sử dụng:Trong Elixir/Erlang, cổng nào được sử dụng cho `Node.connect`?

iex --sname [email protected] --cookie foo 

Và rồi một khác có thể kết nối nút này trong REPL sử dụng:

Node.connect(:"[email protected]") 

Có vẻ như kết nối được qua giao thức TCP. Tuy nhiên, tôi không tìm thấy thông số trong document để chỉ định cổng nào được sử dụng. Có ai có bất kỳ ý tưởng về điều này?

Trả lời

8

nút Kết nối được xử lý bởi Erlang Port Mapping Daemon (epmd) chạy theo mặc định trên cổng . Từ các tài liệu:

Một cổng khác nhau có thể được quy định cho phép một số trường hợp epmd, đại diện cho cụm độc lập của các nút, để cùng tồn tại trên cùng một máy chủ. Tất cả các nút trong một cụm phải sử dụng cùng một số cổng epmd.

Nút thực tế mở cổng ngẫu nhiên (?) Và thông báo điều này cùng với số sname của địa chỉ epmd địa phương. Khi bạn kết nối với '[email protected]', máy ảo Erlang của bạn sẽ yêu cầu điều khiển từ xa epmd chạy trên 10.99.1.50 trên cổng 4369 để biết thông tin về số 'node1'. Nó sẽ trả lời với số cổng thực tế mà quá trình của bạn sau đó kết nối trực tiếp.

5

Theo bài đăng này Erlang Distribution Erlang sử dụng cổng 4369 qua TCP. Bài đăng có thêm thông tin về điều này.

Đối với tường lửa: Phân phối Erlang sử dụng cổng cho epmd cũng như cổng ngẫu nhiên cho mỗi nút. Bạn có thể giới hạn phạm vi của các cổng ngẫu nhiên này bằng cách sử dụng các thiết lập môi trường ứng dụng hạt nhân Erlang inet_dist_listen_min và inet_dist_listen_max. Bạn sẽ cần phải cho phép các kết nối TCP đến TCP trên các cổng này, nhưng chỉ từ các máy chủ khác của cụm.

Bạn cũng có thể quan tâm đến việc này: Chris McCoord on the subject

+1

Cổng 4369 chỉ được sử dụng để giao tiếp các cổng thực tế. – filmor

+0

@filmor có vẻ đúng. Cảm ơn bạn đã sửa chữa. –

Các vấn đề liên quan