问题
我有两个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任何可能的客户端吗?
答案 0 :(得分:1)
首先,如果你从ping
ping(通常的server_machine
而不是erlang ping)client_machine
,你会得到is alive
吗?通常,当节点不在同一台计算机/服务器上时,您需要使用-name
和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 names
即client_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)