在服务器ping客户端之前,Erlang客户端无法ping服务器

时间:2012-08-22 03:33:02

标签: erlang firewall ping

问题

我有两个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任何可能的客户端吗?

3 个答案:

答案 0 :(得分:1)

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

如果两台计算机可以使用正常ping看到对方,则尝试使用计算机的IP Adresses启动节点。可以说,client_machine = 192.168.100.2server_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 namesclient_machine,如果您在UNIX / LINUX,则需要在/etc/hosts中添加机器的IP地址和名称或至少使用两台计算机使用相同的DNS服务器,可以解析这些名称。另外,当您阅读erlang的net_adm文档时,您会发现erlang has an equivalent of /etc/hosts

答案 1 :(得分:1)

经过仔细检查后,我发现了一切:我在服务器上有防火墙规则,允许C:\ Program Files \ erl5.9.1 \ bin \ erl.exe但运行C:\ Program Files \ erl5.9.1 \ 专家评审组-5.9.1 \ BIN \ erl.exe。

我因为错过了类似的东西而感到愚蠢但是我觉得我最好还是有这个,所以其他人可以从中受益:/

答案 2 :(得分:0)

同时“client_machine”和“server_machine”可以解析吗?您可以从命令行使用ping server_machine进行检查。

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