如何连接到使用短名称的Erlang节点?

Rog*_*mbe 6 erlang

当我运行时erl -sname foo,创建的节点名称使用主机名而不是"localhost",因此它会生成为,例如foo@roger-pc.

然后register(shell, self()),我可以从另一个节点(erl -sname bar)发送消息,如下所示:

{shell, 'foo@roger-pc'} ! {hello, world}.
Run Code Online (Sandbox Code Playgroud)

但如果我使用它就行不通{shell, foo} ! {knock, knock}.永远不会收到该消息.

如何连接到使用短名称的同一台PC上的Erlang节点?或者:如何导出目标节点名称的"@ roger-pc"部分?或者:我应该erl -name foo@localhost用来注册长名吗?

一些背景:我正在编写一个生成erl进程的escript ,我希望能够将该操作系统进程的消息发送回原始脚本.

Odo*_*rus 8

你可以为sname明确指定'localhost'.

第一个壳

erl -sname ax@localhost
register(rcvr, self()).
Run Code Online (Sandbox Code Playgroud)

第二个壳

erl -sname bx@localhost
net_kernel:connect_node(ax@localhost).
{rcvr, ax@localhost} ! hello.
Run Code Online (Sandbox Code Playgroud)

再来一次炮弹

(ax@localhost)7> flush().
Shell got hello
ok
Run Code Online (Sandbox Code Playgroud)