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']).

(0)

相关推荐

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

    上一篇文章中说到, 注册进程关联的原子具有全局作用域, 这里的全局指的是当前 Erlang 虚拟机, 在分布式中, 便是当前分布式节点. 因此, 在一个节点中注册进程关联的原子, 在另一个节点中是不能直接使用, 而必须配和目标节点使用. 复制代码 代码如下: {RegName, Node} ! {messages}. 例子 先启动一个 Server 节点 复制代码 代码如下: erl -sname server 然后在 Erlang Shell 中操作 先简单介绍几个常用函数 复制代码 代码如下

  • Erlang中的注册进程使用实例

    之前看到 Erlang 中的注册进程时,对注册并不理解,主要是不理解注册的原子的作用域.刚才突然想明白了: 复制代码 代码如下: 注册进程关联的原子具有全局作用域 也就是说关联了注册进程之后的原子可以全局被使用 Erlang 中的并发机制是通过消息邮箱实现的,进程间进行通讯的方式只有消息邮箱,而进程间通讯需要知道进程的进程号,而使用 spawn 产生新进程时会返回新进程的进程号供使用. 一个最简单的进程间通信的程序如下 复制代码 代码如下: -module(test). start() ->  

  • 详解nodejs中的process进程

    虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程.node是一个用于事件循环的线程,但是你可以在这个事件循环之外创建其他的进程(线程)参与工作. 进程模块 process模块允许你获得或者修改当前node进程的设置,不想其他的模块,process是一个全局进程(node主进程),你可以直接通过process变量直接访问它. process实现了EventEmitter接口,exit方法会在当进程退出的时候执行.因为进程退出之

  • 分析运行中的 Python 进程详细解析

    在 Java 中打印当前线程的方法栈,可以用 kill -3 命令向 JVM 发送一个 OS 信号,JVM 捕捉以后会自动 dump 出来:当然,也可以直接使用 jstack 工具完成,这些方法好几年前我在这篇性能分析的文章 中介绍过.这样的需求可以说很常见,比如定位死锁,定位一个不工作的线程到底卡在哪里,或者定位为什么 CPU 居高不下等等问题. 现在工作中我用的是 Python,需要线上问题定位的缘故,也有了类似的需求--想要知道当前的 Python 进程"在干什么".但是没有了

  • 如何在C#中使用注册表

    一.什么是注册表 注册表是Microsoft Windows操作系统和其应用程序中的一个重要的层次型数据库,用于存储系统和应用程序的设置信息.由键(key,或称"项").子键(subkey,子项)和值项(value)构成.一个键就是树状数据结构中的一个节点,而子键就是这个节点的子节点,子键也是键.一个值项则是一个键的一条属性,由名称(name).数据类型(datatype)以及数据(data)组成.一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认

  • 深入了解Python 中线程和进程区别

    目录 一.什么是进程/线程 1.引论 2.线程 3.进程 4.区别 5.使用 二.多线程使用 1.常用方法 2.常用参数 3.多线程的应用 3.1重写线程法 3.2直接调用法 4.线程间数据的共享 三.多进程使用 1.简介 2.应用 2.1重写进程法 2.2直接调用法 3.进程之间的数据共享 3.1Lock方法 3.2Manager方法 四.池并发 1.语法 2.获取CPU数量 3.线程池 3.进程池 一. 什么是进程 / 线程 1. 引论 众所周知,CPU是计算机的核心,它承担了所有的计算任务

  • Netty分布式ByteBuf中PooledByteBufAllocator剖析

    目录 前言 PooledByteBufAllocator分配逻辑 逻辑简述 我们回到newDirectBuffer中 有关缓存列表, 我们循序渐进的往下看 我们在static块中看其初始化过程 我们再次跟到initialValue方法中 我们跟到createSubPageCaches这个方法中 最后并保存其类型 前言 上一小节简单介绍了ByteBufAllocator以及其子类UnPooledByteBufAllocator的缓冲区分类的逻辑, 这一小节开始带大家剖析更为复杂的PooledByt

  • jQuery插件zTree实现更新根节点中第i个节点名称的方法示例

    本文实例讲述了jQuery插件zTree实现更新根节点中第i个节点名称的方法.分享给大家供大家参考,具体如下: 1.实现代码: <!DOCTYPE html> <html> <head> <title>zTree实现基本树</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link re

  • jQuery插件zTree实现单独选中根节点中第一个节点示例

    本文实例讲述了jQuery插件zTree实现单独选中根节点中第一个节点的方法.分享给大家供大家参考,具体如下: 1.实现代码: <!DOCTYPE html> <html> <head> <title>zTree实现基本树</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link re

  • jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法

    本文实例讲述了jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法.分享给大家供大家参考,具体如下: 1.实现代码: <!DOCTYPE html> <html> <head> <title>zTree实现基本树</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link

随机推荐