在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中向远程节点端口发送消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在socket.io中向特定用户发送消息?

RabbitMQ消息队列集群

RabbitMQ消息队列集群配置

在 Electron 中向父窗口发送消息

在 Erlang 中发送/接收消息(并发)

Erlang进程发送消息