2

如果我启动我的单节点应用程序,则在默认的 EPMD 端口 4369 上 ping 成功。如果我现在将端口更改ERL_EPMD_PORT: 44370为不同的端口,我将无法再连接到它。EPMD 正在监听 44370。经过一些调试后,我发现以下 ping 代码由于pang处理而暂停了我的应用程序。我在这里除了乒乓球。

平码:

net_adm:ping(TargetNode) --> pang

注意:我知道集群需要使用相同的 EPMD 端口才能在集群模式下工作。但到目前为止,节点还没有准备好连接到其他节点。它已经停止 ping 自身。另一方面,如果使用默认端口,一切正常。

似乎net_adm:ping(Host)没有使用 env 变量ERL_EPMD_PORT进行 ping 操作,对吗?或者这里的问题可能出在哪里?

4

1 回答 1

3
 $> epmd &     
[1] 10257
 $> epmd -names
epmd: up and running on port 4369 with data:
 $> fg
[1]  + 10257 running    epmd
^C
 $> epmd -port 44370 &    
[1] 10473
 $> epmd -names       
epmd: Cannot connect to local epmd
 $> export ERL_EPMD_PORT=44370
 $> epmd -names               
epmd: up and running on port 44370 with data:
 $> erl -sname client1@localhost                  
Erlang/OTP 23 [erts-11.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

Eshell V11.1  (abort with ^G)
(client1@localhost)1> net_adm:ping(node()).
pong
(client1@localhost)2>     

我会验证本地epmd确实在该端口中侦听(在 linux 中,您可以使用ss: ss -punta | grep 44370)并且TargetNode正确构建。

于 2021-02-02T15:36:01.020 回答