【问题标题】:In Elixir/Erlang, which port is used for `Node.connect`?在 Elixir/Erlang 中,哪个端口用于“Node.connect”?
【发布时间】:2016-05-26 08:08:39
【问题描述】:

可以通过 iex 初始化 Elixir 节点:

iex --sname node1@10.99.1.50 --cookie foo

然后另一个人可以使用 REPL 连接这个节点:

Node.connect(:"node1@10.99.1.50")

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

【问题讨论】:

    标签: erlang elixir erlang-otp


    【解决方案1】:

    根据这篇文章Erlang Distribution Erlang 通过 TCP 使用端口 4369。该帖子有更多关于此的信息。

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

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

    【讨论】:

    • 端口 4369 仅用于与实际端口通信。
    • @filmor 似乎是正确的。谢谢指正。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 2011-01-23
      • 2019-04-24
      • 2013-09-16
      • 2015-03-05
      • 2011-05-08
      • 2016-11-07
      • 1970-01-01
      • 2016-05-05
      相关资源
      最近更新 更多