繁体   English   中英

Erlang:rpc:对远程节点的调用因function_clause而崩溃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM