所以我搜索了一下,发现我可以使用rpc:call / 5来询问远程节点是否有一个在某个名称下注册的进程,如果无法到达节点则超时,无论何时何地我尝试使用以下参数调用rpc:call / 5:
Pid = rpc:call(Node, erlang, whereis, [Name], 3000)
它只是崩溃,我无法弄清楚哪个参数正在造成它。以下崩溃有params:' Node = name@0.0.0.0'和'名称=服务器'
** Reason for termination ==
** "{{function_clause,[{gen,call,[{rex,\"name@0.0.0.0\"},'$gen_call',
{call,erlang,whereis,[\"server\"],<0.24.0>},3000],
[{file,\"gen.erl\"},{line,149}]},{gen_server,call,3,[{file,\"gen_server.erl\"},{line,186}]},
{rpc,'-do_call/3-fun-0-',4,[{file,\"rpc.erl\"},{line,344}]}]},
{gen_server,call,[{rex,\"name@0.0.0.0\"},
{call,erlang,whereis,[\"server\"],<0.24.0>},3000]}}"
12> ** exception error: "{{function_clause,[{gen,call,\n
[{rex,\"name@0.0.0.0\"},'$gen_call',{call,erlang,whereis,[\"server\"],<0.24.0>},3000],
[{file,\"gen.erl\"},{line,149}]},
{gen_server,call,3,[{file,\"gen_server.erl\"},{line,186}]},
{rpc,'-do_call/3-fun-0-',4,[{file,\"rpc.erl\"},{line,344}]}]},\n {gen_server,call,
[{rex,\"name@0.0.0.0\"},{call,erlang,whereis,[\"server\"],<0.24.0>},3000]}}"
节点&#39; name@0.0.0.0'不存在,但如果那是问题不应该在3秒后超时返回?
答案 0 :(得分:2)
您似乎将节点名称作为字符串传递,但rpc:call
需要一个原子。 (顺便说一下,whereis
的论点也是如此。)
试试这个:
Pid = rpc:call(list_to_atom(Node), erlang, whereis, [list_to_atom(Name)], 3000)
或者,将参数作为原子传递开始。 server
可以按原样传递,但name@0.0.0.0
需要引用,因为它包含句点。原子引用单引号:
Node = 'name@0.0.0.0'