多点分布式Erlang简单实验

正好趁着放假,拿出以前的东西好好玩玩,今天又回顾了一遍Erlang里启动多个结点的过程,记录在此。

首先,启动两个点,foo@xxx跟bar@xxx,命令:
erl -sname foo -setcookie erlang
erl -sname bar -setcookie erlang
测试两点连通:
net_adm:ping(bar@xxx).
这里开始的时候出错来着,是由于我的/etc/hosts里边我的本机xxx的ip还是公司的,没改到家里的,ip出错了,那里自然ping不通。

在两点联通了之后,又实验了一下上次R给我们讲课中,提到的就是远程输出的问题,执行:
(foo@xxx)10> rpc:call(bar@xxx, io, format, ["haha~n"]).
就把haha打印到原地了,而实际系统中,远程连过去之后,想打印到另一端的话,就得指定那个user的方式,用另外的:
(foo@xxx)7> rpc:call(bar@xxx, io, format, [user, "haha~n", []]).
就跑过去了。

这里完了之后,程序中的要做对应的修改,从单机注册发送,改为用global的函数去做:
erlang:register(?server_name, Pid) => global:register_name(?server_name, Pid)
发送变成:
?server_name ! Msg => global:send(?server_name, Msg)

另外就是启动的时候注册的问题,可能race情况,所以用global:trans/2去做就好了:

start() ->
global:trans({?server_name, self()},
fun() ->
case global:whereis_name(?server_name) of
undefined ->
Pid = spawn(...),
global:register_name(?server_name, Pid);
_ ->
ok
end
end).

然后,就好了,可以两个点上互相有所操作了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值