[英]In Elixir/Erlang, which port is used for `Node.connect`?
可以使用以下方法通過iex初始化Elixir節點:
iex --sname node1@10.99.1.50 --cookie foo
然后另一個可以使用以下命令在REPL中連接此節點:
Node.connect(:"node1@10.99.1.50")
似乎連接是通過TCP協議。 但是,我沒有在文檔中找到一個參數來指定使用哪個端口。 有沒有人對此有任何想法?
連接節點由Erlang端口映射守護程序(epmd)處理,該守護程序默認在端口4369上運行。 從文檔:
可以指定不同的端口以允許表示獨立節點集群的epmd的多個實例在同一主機上共存。 群集中的所有節點都必須使用相同的epmd端口號。
實際節點打開一個隨機(?)端口,並將其及其sname
通知給本地epmd
。 當您現在連接到'node1@10.99.1.50'
,您的Erlang VM將詢問端口4369上10.99.1.50
上運行的遠程epmd
,以獲取有關'node1'
。 它將回答您的進程直接連接到的實際端口號。
根據這篇文章, Erlang Distribution Erlang在TCP上使用端口4369。 該帖子有關於此的更多信息。
對於防火牆:Erlang發行版使用端口4369用於epmd以及每個節點的隨機端口。 您可以使用Erlang內核應用程序環境設置inet_dist_listen_min和inet_dist_listen_max來限制這些隨機端口的范圍。 您需要允許這些端口上的傳入TCP連接 ,但僅允許來自群集的其他主機。
您可能也對此感興趣: Chris McCoord就此問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.