在 Elixir/Erlang 中,哪个端口用于 `Node.connect`?

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 协议连接的。但是,我没有在document中找到指定使用哪个端口的参数。有人对此有任何想法吗?

根据此 post Erlang Distribution Erlang 通过 TCP 使用端口 4369。 post 有更多关于此的信息。

For the firewall: Erlang distribution uses port 4369 for epmd as well as random ports for each node. You can limit the range of these random ports by using Erlang kernel application environment settings inet_dist_listen_min and inet_dist_listen_max. You will need to allow incoming TCP connections on these ports, but only from other hosts of the cluster.

您可能对此也感兴趣:Chris McCoord on the subject

连接节点由 Erlang Port Mapping Daemon (epmd) 处理,默认情况下在端口 4369 上运行。来自文档:

A different port can be specified to allow several instances of epmd, representing independent clusters of nodes, to co-exist on the same host. All nodes in a cluster must use the same epmd port number.

实际节点打开一个随机(?)端口并将其连同其 sname 一起通告到本地 epmd。当您现在连接到 'node1@10.99.1.50' 时,您的 Erlang VM 将向端口 4369 上 10.99.1.50 上的远程 epmd 运行 询问有关 'node1' 的信息。它将回答您的进程随后直接连接到的实际端口号。