【Erlang】节点互联

epmd

epmd(Erlang Port Mapper Daemon)是Erlang的端口映射守护进程,文档:Erlang – epmd

当erlang的节点启动时,会将节点名称和地址发送给epmd

epmd会记录当前机器下节点的信息,主机间可以通过epmd交换双方主机下的节点信息并进行连接

节点互联要素

Cookie

erlang的每个节点都拥有自己的cookie,节点间若要通讯需要有相同的cookie作为认证

新增节点时,若没有使用-setcookie指定cookie,默认会使用.erlang.cookie中的内容作为该节点的cookie值

在节点运行时,可使用erlang:get_cookie().查看节点的cookie值

如何设置Cookie

  • 修改默认cookie【不建议】

​ 修改.erlang.cookie中的内容,原本权限为只读。可以使用chmod +w .erlang.cookie使其可写。修改内容后再使用chmod -w .erlang.cookie将其改回只读【不改回只读会出错】

  • 新增节点时通过-setcookie指定cookie

    例:erl -name zlrS@124.212.30.188 -setcookie ZLR

  • 在节点运行时修改Cookie

    例:erlang:set_cookie(node(),‘ZLR’).

命名

节点可以使用短命名(-sname)/长命名启动(-name)

shot name和long name的节点间不能进行通信

开放端口

在不同主机进行通信时,需要开放节点通信所需的端口。这里的端口除了epmd端口外,还需要开放节点对应的端口

例如:A主机节点位于33333端口,B主机节点位于44444端口

那么:A主机需开放:4369、33333端口;B主机需开放:4369、44444

实践

启动节点

主机A:erl -name zlrA@124.212.30.188 -setcookie ZLR

主机B:erl -name zlrB@115.234.191.121 -setcookie ZLR

epmd

此时在主机A和主机B上都可以使用erl_epmd:names()查看epmd注册的节点

主机A:

%% 查看本机的epmd下注册的节点
(zlrA@124.212.30.188)1> erl_epmd:names().
{ok,[{"zlrA",45635}]}
%% 查看主机B的epmd下注册的节点
(zlrA@124.212.30.188)2> erl_epmd:names(115.234.191.121).
{ok,[{"zlrA",52672}]}

主机B:

%% 查看本机的epmd下注册的节点
(zlrB@115.234.191.121)1> erl_epmd:names().
{ok,[{"zlrB",52672}]}
%% 查看主机A的epmd下注册的节点
(zlrB@115.234.191.121)2> erl_epmd:names(124.212.30.188).
{ok,[{"zlrA",45635}]}

若双方能通过erl_epmd:names(‘对方IP’)看到对方epmd下注册的节点,说明双方的epmd端口至少是互通的

建立连接

此时可以使用net_adm:ping()来对节点间进行互联,若返回pong则连接成功,返回pang则连接失败

若此时主机A未开放45635端口,主机B未开放52672端口,连接会失败

主机B:

%% 使用net_adm:ping
(zlrB@115.234.191.121)3> net_adm:ping('zlrA@124.212.30.188').
pong
(zlrB@115.234.191.121)4> nodes().
['zlrA@124.212.30.188']

此时查看nodes()可以发现两台主机下的节点之间已经相互建立了连接

主机A:

(zlrA@124.212.30.188)3> nodes().
['zlrB@115.234.191.121']
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值