programming erlang 分布式编程spawn(Node, fun)

示例

dist_demo.erl文件

%%%-------------------------------------------------------------------
%%% @author yangyamin
%%% @copyright (C) 2016, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 13. 一月 2016 下午3:20
%%%-------------------------------------------------------------------
-module(dist_demo).
-author("yangyamin").

%% API
-export([start/1, rpc/4]).


start(Node) ->
  spawn(Node, fun() -> loop() end).

rpc(Pid, M, F, A) ->
  Pid ! {rpc, self(), M, F, A},
  receive
    {Pid, Response} ->
      Response
  end.



loop() ->
  receive
    {rpc, Pid, M, F, A} ->
      Pid ! {self(), catch apply(M, F, A)},
      loop()
  end.

分别两台机器启动erlang node.

bilbo@yangyamin.office.com)1> Pid3 = dist_demo:start('gandalf@vm-100-89.host.idcvdian.com'

报错:

(bilbo@yangyamin.office.com)7> spawn('gandalf@vm-100-89.host.idcvdian.com', fun() -> loop() end).
<6879.42.0>
(bilbo@yangyamin.office.com)8>
=ERROR REPORT==== 13-Jan-2016::15:45:18 ===
Error in process <0.42.0> on node 'gandalf@vm-100-89.host.idcvdian.com' with exit value: {{badfun,#Fun<erl_eval.20.54118792>},[{erlang,apply,2}]}

原因是调用匿名函数 loop10, 远程erlang node以为是在erl_eval中定义;

如果改成 spawn(‘gandalf@vm-100-89.host.idcvdian.com’, fun dist_demo:loop/0). 即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值