Erlang:rpc:对远程节点的调用因函数_子句而崩溃

Erlang:rpc:对远程节点的调用因函数_子句而崩溃,erlang,call,rpc,Erlang,Call,Rpc,因此,我搜索了一下,发现我可以使用rpc:call/5询问远程节点是否以特定名称注册了进程,如果无法访问该节点,则会超时,但是每当我尝试使用以下参数调用rpc:call/5时: Pid = rpc:call(Node, erlang, whereis, [Name], 3000) 它只是崩溃了,我不知道是哪个参数造成的。以下崩溃具有参数:'节点=name@0.0.0.0'和'Name=server' ** Reason for termination == ** "{{function_cla

因此,我搜索了一下,发现我可以使用rpc:call/5询问远程节点是否以特定名称注册了进程,如果无法访问该节点,则会超时,但是每当我尝试使用以下参数调用rpc:call/5时:

Pid = rpc:call(Node, erlang, whereis, [Name], 3000)
它只是崩溃了,我不知道是哪个参数造成的。以下崩溃具有参数:'节点=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]}}"
**终止原因==
**{{function\ u子句,[{gen,call,[{rex,\”name@0.0.0.0\“},$gen_call”,
{call,erlang,whereis,[\“server\”],},3000],
[{file,\'gen.erl\'},{line,149}]},{gen\u server,call,3,[{file,\'gen\u server.erl\'},{line,186}]},
{rpc'-do_call/3-fun-0-',4,[{file,\'rpc.erl\'},{line,344}]},
{gen_服务器,调用,[{rex,\”name@0.0.0.0\"},
{call,erlang,whereis,[\'server\'],},3000]}
12> **异常错误:“{function_子句,[{gen,call,\n
[{rex,\”name@0.0.0.0\“},$gen_call',{call,erlang,whereis,[\“server\”],},3000],
[{file,\'gen.erl\'},{line,149}]},
{gen\u server,call,3,[{file,\'gen\u 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\'],},3000]}

节点的name@0.0.0.0'不存在,但如果是这个问题,它不应该在3秒后返回并超时吗?

看起来您正在以字符串形式传递节点名,但是
rpc:call
需要一个atom。(顺便说一句,
的参数也是如此,这里是

试试这个:

Pid = rpc:call(list_to_atom(Node), erlang, whereis, [list_to_atom(Name)], 3000)
或者,也可以从原子开始传递参数<代码>服务器可以按原样传递,但
name@0.0.0.0
需要引用,因为它包含句点。原子用单引号引用:

Node = 'name@0.0.0.0'

哦,这就是为什么。我无法控制节点的inparam的外观,而不仅仅是一个名称后跟@和一个IP。但是list_to_atom做到了,非常感谢!如果你不介意的话,还有一个问题:我怎样才能自己拿name@ip?您可以通过调用
node()
来获取此信息。