Erlang系统与别的机器进行交互时必须有同样的magic cookie,保存在一个称为.erlang.cookie的文件中。
要启动节点,通过命令erl -sname 或者erl -name,在此之前需要启动epmd进程,它负责映射符号名到机器地址,在两个节点使用epmd -daemon,也可以通过使用启动参数-setcookie来设置启动节点的cookie。
启动节点
节点A
节点B
使用erl_epmd:names()可以查看epmd注册的节点
建立链接
使用net_adm:ping()来对节点间进行互联,若返回pong则连接成功,返回pang则连接失败。
节点A:
节点B:
此时从节点A和节点B中都能看见连接的节点。
分布式编程:
- 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]) .
创建的进程调用ping方法,ping方法有两个参数,一个是发送消息的次数,一个就是远程节点的name了,也就是我们将要创建的进程pong的所在节点。start_pong创建一个调用函数pong的进程。
执行start_ping方法。
双方都受到了来自各自的消息。