脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Erlang - Erlang分布式节点中的注册进程使用实例

Erlang分布式节点中的注册进程使用实例

2020-05-27 10:49脚本之家 Erlang

这篇文章主要介绍了Erlang分布式节点中的注册进程使用实例,本文直接给出实例代码,需要的朋友可以参考下

上一篇文章中说到, 注册进程关联的原子具有全局作用域, 这里的全局指的是当前 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']).

延伸 · 阅读

精彩推荐
  • ErlangErlang中3种生成随机数的方法

    Erlang中3种生成随机数的方法

    这篇文章主要介绍了Erlang中3种生成随机数的方法,它们分别是random:uniform()、erlang:now()、crypto:strong_rand_bytes(N),需要的朋友可以参考下 ...

    脚本之家5982020-05-25
  • ErlangErlang实现的一个Web服务器代码实例

    Erlang实现的一个Web服务器代码实例

    这篇文章主要介绍了Erlang实现的一个Web服务器代码实例,本文直接给出实现代码,需要的朋友可以参考下 ...

    Erlang教程网3252020-05-29
  • ErlangErlang中执行linux命令的两种方法

    Erlang中执行linux命令的两种方法

    这篇文章主要介绍了Erlang中执行linux命令的两种方法,本文着重讲解了erlang:open_port的使用,需要的朋友可以参考下 ...

    脚本之家3642020-05-26
  • ErlangErlang中的映射组Map详细介绍

    Erlang中的映射组Map详细介绍

    这篇文章主要介绍了Erlang中的映射组Map详细介绍,本文讲解了创建映射组、更新映射组、两种操作符的区别、映射的增加、删除、获取等内容,需要的朋友可...

    脚本之家4712020-05-27
  • ErlangErlang编程语言的第一印象

    Erlang编程语言的第一印象

    这篇文章主要介绍了Erlang编程语言的第一印象,本文对Erlang做了一个简单总结,需要的朋友可以参考下 ...

    脚本之家3462020-05-28
  • ErlangErlang中的Record详解

    Erlang中的Record详解

    这篇文章主要介绍了Erlang中的Record详解,本文讲解了定义Record、创建Record、访问Record、更新Record、匹配Record和Guard语句、使用Record等内容,需要的朋友可以参考...

    Erlang教程网8892020-05-29
  • ErlangErlang的一些编程技巧分享

    Erlang的一些编程技巧分享

    这篇文章主要介绍了Erlang的一些编程技巧分享,本文是是实际编程中的个人总结,需要的朋友可以参考下 ...

    脚本之家3792020-05-26
  • ErlangErlang并发编程介绍

    Erlang并发编程介绍

    这篇文章主要介绍了Erlang并发编程介绍,本文讲解了进程的创建 、进程间通信、超时设置以及给出代码实例,需要的朋友可以参考下 ...

    脚本之家4602020-05-24