zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    CF1450H2
    CF1379F2
    CF1217F
    CF1393E2
    CF1510H
    CF1514E
    CF1515G
    CF1516E
    在pycharm中导入PyMysql出错,解决方法
    搭建fastdfs文件服务器
  • 原文地址:https://www.cnblogs.com/ziyouchutuwenwu/p/4061640.html
Copyright © 2011-2022 走看看