【发布时间】:2017-06-26 21:46:57
【问题描述】:
在两个远程节点之间发送消息时。
erlang:send 是否使用像 epmd 那样的单一端口?
【问题讨论】:
在两个远程节点之间发送消息时。
erlang:send 是否使用像 epmd 那样的单一端口?
【问题讨论】:
erlang:send 不使用像 epmd 那样的单一端口。 Erlang 使用 EPMD 端口来查找其他节点,因此所有服务器必须能够在此端口上相互通信。在 Erlang 集群中,所有节点都连接到网格中的所有其他节点。 Erlang epmd 将使用两个端口,一个用于发现其他 erlang 节点(默认端口 4369)和用于实际通信的动态范围。
集群中的所有节点都必须使用相同的 epmd 端口号进行监听。
另外,请注意 Epmd 会跟踪哪个 Erlang 节点正在使用本地机器上的哪些端口。如果您想将 Erlang 用于 Erlang 节点间通信的端口范围限制为 9100-9105,您可以在 app.config 中添加以下行,设置内核变量 'inet_dist_listen_min ' 和 'inet_dist_listen_max'。
示例:
{ kernel, [
{inet_dist_listen_min, 9100},
{inet_dist_listen_max, 9105}
]},
或者在使用内核变量“inet_dist_listen_min”和“inet_dist_listen_max”启动erlang节点时。
示例:
erl -sname foo -kernel inet_dist_listen_min 9100 inet_dist_listen_max 9105
确保您设置的范围为集群中的所有节点提供足够的端口。
【讨论】:
set_env 示例有效吗?我怀疑在您有机会更改任何环境变量之前选择了端口。