这是 Erlang 中的 2 进程通信程序。
我需要在不同的计算机上运行每个进程。
我需要运行 erl -name ping
在计算机 2 中,其主机名为 linux-2.mydomain
而且,我需要运行
erl -name pong
在计算机 1 中,其主机名为 linux-1.mydomain
然后,
在计算机 1 上,我运行:
tut17:start_pong().
在计算机 2 上,我运行:
tut17:start_ping(pong@linux-1)
但是,我得到了错误:
- 异常错误:算术表达式中的错误参数 -/2 称为 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]).