![](/img/trans.png)
[英]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.