当前位置: 首页 > 编程笔记 >

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

颛孙麻雀
2023-03-14
本文向大家介绍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']).

 类似资料:
  • 本文向大家介绍Erlang中的注册进程使用实例,包括了Erlang中的注册进程使用实例的使用技巧和注意事项,需要的朋友参考一下 之前看到 Erlang 中的注册进程时,对注册并不理解,主要是不理解注册的原子的作用域。刚才突然想明白了: 也就是说关联了注册进程之后的原子可以全局被使用 Erlang 中的并发机制是通过消息邮箱实现的,进程间进行通讯的方式只有消息邮箱,而进程间通讯需要知道进程的进程号,

  • 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个进程中,依靠网络通信。由于managers模块封

  • 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个进程中,依靠网络通信。由于managers模块封

  • 为了保证manager节点的容错性,我们最好将manager节点个数设定为奇数个。在网络被划分成2个部分情况下,奇数个manager节点能够较高程度的保证有投票结果的可能性。如果网络被划分成2个部分以上,投票有结果的可能性将不能被保证。 Swarm节点数 法定票数 允许manager不可用个数 1 1 0 2 2 0 3 2 1 4 3 1 5 3 2 6 4 2 7 4 3 8 5 3 9 5

  • 本文向大家介绍在Python程序中实现分布式进程的教程,包括了在Python程序中实现分布式进程的教程的使用技巧和注意事项,需要的朋友参考一下 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。 Python的multiprocessing模块不但支持多进程,其中man

  • 本文向大家介绍怎么在单节点上实现分布式锁?相关面试题,主要包含被问及怎么在单节点上实现分布式锁?时的应答技巧和注意事项,需要的朋友参考一下 SET resourcename myrandom_value NX PX 30000 主要依靠上述命令,该命令仅当 Key 不存在时(NX保证)set 值,并且设置过期时间 3000ms (PX保证),值 myrandomvalue 必须是所有 client