在两个远程节点之间发送消息时。
erlang:send会使用像epmd那样的单个端口吗?
答案 0 :(得分:3)
erlang:发送不使用像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
确保您设置的范围为群集中的所有节点提供了足够的端口。