[英]What's the difference between function_clause and badarg in Erlang?
[英]Erlang: rpc:call to remote node crashes with function_clause
因此,我四处搜索,发现可以使用rpc:call / 5来询问远程节点是否以某个名称注册了进程,并且无法到达该节点的超时,但是无论何时我尝试调用rpc :call / 5具有以下参数:
Pid = rpc:call(Node, erlang, whereis, [Name], 3000)
它只是崩溃了,我不知道是哪个参数引起的。 以下崩溃具有以下参数:'Node=name@0.0.0.0'和'Name = server'
** 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]}}"
节点“ name@0.0.0.0”不存在,但是如果那是问题所在,它不应该在3秒后返回超时吗?
看来您要以字符串形式传递节点名称,但是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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.