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

时间:2016-02-15 12:06:24

标签: erlang elixir otp

可以使用以下方法通过iex启动Elixir节点:

iex --sname node1@10.99.1.50 --cookie foo

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

Node.connect(:"node1@10.99.1.50")

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

2 个答案:

答案 0 :(得分:9)

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

  

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

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

答案 1 :(得分:6)

根据这篇文章Erlang Distribution,Erlang在TCP上使用端口4369。该帖子提供了更多相关信息。

  

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

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