两个进程由Erlang在两台计算机中进行通信

时间:2012-04-20 00:37:02

标签: linux erlang multiprocessing

这是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)

但是,我收到了错误:

  • 异常错误:算术表达式中的错误参数  在运营商 - / 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]).

1 个答案:

答案 0 :(得分:4)

将节点名称放在单引号中:

tut17:start_ping('pong@linux-1')

http://www.erlang.org/doc/reference_manual/data_types.html#id66276

  

应封闭原子   如果它不以小写字母开头,则用单引号(')表示   如果它包含除字母数字字符以外的其他字符,   下划线(_)或@。