簡體   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