1

我有一个节点启动

erl -name n1@198.XXX.X.XX -setcookie somecookie

(n1@198.XXX.X.XX)>

但后来我有另一个 erlang 应用程序,其中我有一个模块,我想在其中使用我刚刚注册的节点(n1@198.XXX.X.XX)。我试图直接从代码 net_adm:ping(n1@198.XXX.X.XX) 做。我感到一阵阵痛。我可以看到 net_adm:names()。在元组中返回所有已注册和存活的节点。{ok [{node, 999}],[{n1,9993}],[{theappnode, 8383}]}

我需要一种连接到 n1 的方法,然后使用 to 用 rpc ping 另一个远程节点,例如

conn = 连接到节点(n1)然后执行 rpc……这些都来自另一个 erlang 应用程序的模块代码……以上可能吗?

4

1 回答 1

1

可能您的其他节点不是以相同的 cookie 启动的。你有两个解决方案:

  1. 用相同的cookie启动另一个节点

    erl -name otherapp -setcookie some cookie
    1> net_adm:ping('n1@198.X.X.X').
    pong
    
  2. 启动另一个节点,告诉它n1节点的cookie是什么。

    erl -name otherapp
    1> net_adm:ping('n1@198.X.X.X').
    pang
    2> erlang:set_cookie('n1@198.X.X.X', 'somecookie').
    true
    3> net_adm:ping('n1@198.X.X.X').
    pong
    

您不能在分布式集群中混合使用短名称和长名称(-sname 和 -name)。

于 2013-08-12T07:52:22.703 回答