1

问题

我有两个 Erlang 节点,两台计算机各一个。我使用唯一的 sname 和相同的 cookie 启动每个节点。当我尝试从客户端到服务器的 net_adm:ping/1 时,它总是超时,除非我首先从服务器 ping 到客户端。

例如,在客户端:

(client@client_machine)1> net_adm:ping(server@server_machine).
pang

然后在服务器上:

(server@server_machine)1> net_adm:ping(client@client_machine).
pong

然后再次从客户端:

(client@client_machine)2> net_adm:ping(server@server_machine).
pong

我已经允许 erl.exe 和 werl.exe 通过防火墙,用于两台机器上的所有入站和出站连接。我无法使用 -name ping 任一方向;我必须使用-sname。

问题

这仍然是防火墙问题还是已知行为?如果是已知问题,解决方法是什么?服务器是否定期尝试 ping 任何可能的客户端?

4

3 回答 3

1

首先,如果你从 ping (通常ping不是 erlang ping)server_machineclient_machine你得到了is alive吗?通常,当节点不在同一台计算机/服务器上时,您需要使用-nameand NOT-sname 选项。

如果两台机器可以正常看到对方ping,则尝试使用IP Adresses机器的 启动节点。可以说,client_machine = 192.168.100.2虽然server_machine = 192.168.100.5,节点应该像这样启动:

# erl -name client@192.168.100.2 -setcookie mycookie
# erl -name server@192.168.100.5 -setcookie mycookie

然后做erlang ping,看看会发生什么。另外,由于您使用的是Resolvable namesie client_machine,如果您在使用,则UNIX / LINUX需要添加 IP 地址和机器的名称,/etc/hosts或者至少使两台机器使用相同的 DNS 服务器,这可以解析这些名称。另外,当您阅读net_admerlang 的文档时,您会发现erlang 也有 等价物/etc/hosts

于 2012-08-22T05:54:15.220 回答
1

After double-checking everything I figured it out: I had firewall rules on the server to allow C:\Program Files\erl5.9.1\bin\erl.exe but was running C:\Program Files\erl5.9.1\erts-5.9.1\bin\erl.exe.

I feel stupid for missing something like that but figured I'd better own up to it so somebody else can benefit from this :/

于 2012-08-24T02:23:57.077 回答
0

“client_machine”和“server_machine”都可以解析吗?ping server_machine你可以从命令行检查它。

因为您在同一个物理实例上执行此操作,并且每个虚拟节点具有不同的 sname,所以它们都应该是可访问的,例如,两者都在 /etc/hosts 中有记录(windows/system32/drivers/etc/hosts 在 Windows 案例中)

于 2012-08-23T05:35:00.080 回答