分享好友 编程语言首页 频道列表

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

Erlang  2015-06-30 10:180

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

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Erlang和Ruby的Socket通讯
server.erl Java代码 -module(server).  -export([start/0,start/1,process/1]).  -define(defPort, 8888).    start() - start(?defPort).    start(Port) -    case gen_tcp:listen(Port, [binary, {packet, 0}, {active, fals

0评论2023-02-09782

github上的Lua in Erlang
https://github.com/rvirding/luerl

0评论2023-02-08449

Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
如果要比较两个数,如果两个数之间是不同的类型,比如float和int那么,==操作会首先把两个数字转换成相同的相同类型

0评论2015-11-0948

php实现与erlang的二进制通讯实例解析
这篇文章主要介绍了php实现与erlang的二进制通讯实例解析,需要的朋友可以参考下

0评论2015-09-1795

Erlang中的匹配模式总结
这篇文章主要介绍了Erlang中的匹配模式总结,本文讲解了赋值时匹配、流程控制中的匹配、消息传递匹配等内容,需要的朋友可以参考下

0评论2015-06-3060

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

0评论2015-06-30142

ErlangIO编程之文件目录操作常用方法小结
这篇文章主要介绍了Erlang IO编程之文件目录操作常用方法小结,本文讲解了常用的文件操作如打开文件、读取文件、写入文件、删除文件等,需要的朋友可以参考下

0评论2015-06-3062

Erlang语法学习笔记:变量、原子、元组、列表、字符串
这篇文章主要介绍了Erlang语法学习笔记:变量、原子、元组、列表、字符串,本文简明总结了这5种类型的相关知识,需要的朋友可以参考下

0评论2015-06-3071

Erlang中的函数与流程控制介绍
这篇文章主要介绍了Erlang中的函数与流程控制介绍,本文先是讲解了函数的一些知识,然后讲解了case语句和if语句及算术表达式等内容,需要的朋友可以参考下

0评论2015-06-30126

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

0评论2015-06-30111

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

0评论2015-06-30107

Erlang实现的百度云推送Android服务端实例
这篇文章主要介绍了Erlang实现的百度云推送Android服务端实例,本文先是讲解了实现步骤,然后给出实现代码,需要的朋友可以参考下

0评论2015-06-3040

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

0评论2015-06-3090

CentOS6.5源码安装Erlang教程
这篇文章主要介绍了CentOS 6.5源码安装Erlang教程,本文讲解了源码编译安装的过程和遇到的一些错误处理方法,需要的朋友可以参考下

0评论2015-06-30104

Erlang项目内存泄漏分析方法
这篇文章主要介绍了Erlang项目内存泄漏分析方法,本文讲解了分析方法、分析流程并找到问题原因和解决方法,需要的朋友可以参考下

0评论2015-06-30116

Erlang程序设计(第2版)读书笔记:Erlang安装和基础语法
这篇文章主要介绍了Erlang程序设计(第2版)读书笔记:Erlang安装和基础语法,需要的朋友可以参考下

0评论2015-06-3072

Erlang中的注册进程使用实例
这篇文章主要介绍了Erlang中的注册进程使用实例,本文给出正常进程通信实例和使用使用注册进程通信实例,需要的朋友可以参考下

0评论2015-06-30142

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

0评论2015-06-3074

Erlang初学:Erlang的一些特点和个人理解总结
这篇文章主要介绍了Erlang初学:Erlang的一些特点和个人理解总结,本文总结了函数式编程、一切都是常量、轻量进程、进程端口映射及典型缺点等内容,需要的朋友可以参考下

0评论2015-06-3076

Erlang中的模块与模式匹配介绍
这篇文章主要介绍了Erlang中的模块与模式匹配介绍,本文分别对模块与模式匹配做了讲解,需要的朋友可以参考下

0评论2015-06-3063

更多推荐