这是Erlang中的2进程通信程序。
我需要在不同的计算机上运行每个进程。
我需要跑步 erl -name ping
在computer2中,其主机名为linux-2.mydomain
而且,我需要运行
erl -name pong
在computer1中的,其主机名是linux-1.mydomain
然后,
在计算机1上,我运行:
tut17:start_pong().
在计算机2上,我运行:
tut17:start_ping(pong@linux-1)
但是,我收到了错误:
似乎Erlang认为“ - ”是“linux-1”中的减号运算符。
那么,如何让Erlang理解我的命令呢?
非常感谢任何帮助。
代码如下:
-module(tut17).
-export([start_ping/1, start_pong/0, ping/2, pong/0]).
ping(0, Pong_Node) ->
{pong, Pong_Node} ! finished,
io:format("ping finished~n", []);
ping(N, Pong_Node) ->
{pong, Pong_Node} ! {ping, self()},
receive
pong ->
io:format("Ping received pong~n", [])
end,
ping(N - 1, Pong_Node).
pong() ->
receive
finished ->
io:format("Pong finished~n", []);
{ping, Ping_PID} ->
io:format("Pong received ping~n", []),
Ping_PID ! pong,
pong()
end.
start_pong() ->
register(pong, spawn(tut17, pong, [])).
start_ping(Pong_Node) ->
spawn(tut17, ping, [3, Pong_Node]).
答案 0 :(得分:4)
将节点名称放在单引号中:
tut17:start_ping('pong@linux-1')
http://www.erlang.org/doc/reference_manual/data_types.html#id66276
应封闭原子 如果它不以小写字母开头,则用单引号(')表示 如果它包含除字母数字字符以外的其他字符, 下划线(_)或@。