Erlang:rpc:使用function_clause调用远程节点崩溃

时间:2014-10-16 14:41:52

标签: erlang call rpc

所以我搜索了一下,发现我可以使用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秒后超时返回?

1 个答案:

答案 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'