• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Erlang分布式节点中的注册进程使用实例
    POST TIME:2021-10-18 17:53

    上一篇文章中说到, 注册进程关联的原子具有全局作用域, 这里的全局指的是当前 Erlang 虚拟机, 在分布式中, 便是当前分布式节点. 因此, 在一个节点中注册进程关联的原子, 在另一个节点中是不能直接使用, 而必须配和目标节点使用.

    复制代码 代码如下:

    {RegName, Node} ! {messages}.

    例子

    先启动一个 Server 节点

    复制代码 代码如下:

    erl -sname server

    然后在 Erlang Shell 中操作

    先简单介绍几个常用函数

    复制代码 代码如下:

    % 查看当前节点
    node().
    % => 'server@Gentoo-PC'

    % 查看所有已连接的节点
    nodes().
    % => []                                        % 此时还未连接其它节点

    % 查看当前节点是否存活
    is_alive().
    % => true


    然后进入正题
    复制代码 代码如下:

    % 启动上一篇文章中最后的那个程序
    test:start().
    % Waiting for new message.
    % => true

    % 当前节点可以使用 testp 原子
    testp ! message.
    % New message: message
    % Waiting for new message.
    % => message


    然后启动另外一个 Client 节点
    复制代码 代码如下:

    erl -sname client

    在新的 Erlang Shell 中
    复制代码 代码如下:

    nodes().
    % => []                                         % 此时未连接节点

    % 当前节点无法直接使用这个原子的
    testp ! {}.
    % ** exception error: bad argument
    %      in operator  !/2
    %         called as testp ! {}

    % 需要配合目标节点一起使用
    {testp, 'server@Gentoo-PC'} ! {}.
    % => {}                                         % 语句返回值


    此时, server 节点就会接收到消息, 并打印出
    复制代码 代码如下:

    % New message: {}
    % Waiting for new message.

    节点间首次连接后, 两个节点将会保持连接

    在 Client 节点中

    复制代码 代码如下:

    nodes().
    % => ['server@Gentoo-PC']

    在 Server 节点中
    复制代码 代码如下:

    nodes().
    % => ['client@Gentoo-PC']

    结尾

    当然, 这只是个方法, 由于在模块中定义了 call 函数包裹了起来, 所以可以使用远程调用, 调用 Server 节点上的 test:call 方法.

    可以使用 rpc 模块中的 call/4 方法远程调用函数

    复制代码 代码如下:

    % 在 Node 节点上执行 apply(Module, Function, Args)
    % 调用成功时返回 Result, 调用失败时返回 {badrpc, Reason}
    -spec rpc:call(Node, Module, Function, Args} -> Result | {badrpc, Reason}

    在 Client 节点中
    复制代码 代码如下:

    rpc:call('server@Gentoo-PC', test, call, ['message from other node']).

    上一篇:Erlang中的注册进程使用实例
    下一篇:Erlang中的映射组Map详细介绍
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信