在erlang中向远程节点端口发送消息
Posted
技术标签:
【中文标题】在erlang中向远程节点端口发送消息【英文标题】:Sending message to remote node port(s) in erlang 【发布时间】:2017-06-26 21:46:57 【问题描述】:在两个远程节点之间发送消息时。
erlang:send 是否使用像 epmd 那样的单一端口?
【问题讨论】:
【参考方案1】: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
示例有效吗?我怀疑在您有机会更改任何环境变量之前选择了端口。
@legoscia 修改了答案,原因是使用 set_env 确实设置了内核变量,但节点继续使用原始端口号。很奇怪。以上是关于在erlang中向远程节点端口发送消息的主要内容,如果未能解决你的问题,请参考以下文章