当我运行时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 ,我希望能够将该操作系统进程的消息发送回原始脚本.
你可以为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)