erlang分布式例子

抄袭自

http://www.blogjava.net/killme2008/archive/2007/06/29/127099.html

 

简单的说,就是

主机上需要同时启用短节点名,或者长节点名

 

保证集群内部cookie一致
使用cookie文件复制的方式或者命令行-setcookie参数都可以

 

如果使用短节点名,则需在/etc/hosts内添加所有主机的ip-主机名映射

 

调用方式,有两种

通过Pid调用

-module(test).

-compile(export_all).

start(Node) ->
    spawn(Node,test, loop, [0]).

debugger(Pid) ->
    Pid ! start_debugger.

db(Pid) ->
    Pid ! start_mnesia.

loop(Val) ->
    receive
        start_debugger ->
            debugger:start(),
            loop(Val);
        start_mnesia ->
            application:start(mnesia),
            loop(Val)
    end.

注意:

如果Pid没有注册为global的name,则只能通过spawn或者spawn_link创建跨node进程

gen_server之类,可以通过start_link,在创建的时候,直接创建global的name,以后调用直接通过gen_server:call调用

另外,这个代码需要在远程节点上也编译,否则远程pid调用的时候,会崩溃

 

 

rpc:call

参数为远程node名,不需要pid
监控:net_kernel:monitor_nodes(true)
在集中中任何节点down和up的时候,会收到nodedown和up的消息,处理即可

 

什么时候使用什么方式,看场景了

 

注:

关于自动连接监控网络节点的功能,可以关注这个模块

net_kernel

 

你可能感兴趣的:(erlang)