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

Han*_*Sun 11 erlang elixir erlang-otp

可以使用以下方法通过iex初始化Elixir节点:

iex --sname node1@10.99.1.50 --cookie foo
Run Code Online (Sandbox Code Playgroud)

然后另一个可以使用以下命令在REPL中连接此节点:

Node.connect(:"node1@10.99.1.50")
Run Code Online (Sandbox Code Playgroud)

似乎连接是通过TCP协议.但是,我没有在文档中找到一个参数来指定使用哪个端口.有没有人对此有任何想法?

fil*_*mor 9

连接节点由Erlang端口映射守护程序(epmd)处理,该守护程序默认在端口4369上运行.从文档:

可以指定不同的端口以允许表示独立节点集群的epmd的多个实例在同一主机上共存.群集中的所有节点都必须使用相同的epmd端口号.

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


Sas*_*eca 6

根据这篇文章,Erlang Distribution Erlang在TCP上使用端口4369.该帖子有关于此的更多信息.

对于防火墙:Erlang发行版使用端口4369用于epmd以及每个节点的随机端口.您可以使用Erlang内核应用程序环境设置inet_dist_listen_min和inet_dist_listen_max来限制这些随机端口的范围.您将需要允许这些端口上的传入TCP连接,但仅允许来自群集的其他主机.

您可能也对此感兴趣:Chris McCoord就此问题

  • 端口 4369 仅用于与实际端口进行通信。 (2认同)