erlang远程调用示例

简介:

下面的例子试用了erlang的分布式编程,从中可以看出像erlang这种基于消息的纯函数语言在分布式编程中的强大威力.

简单例子


在远程节点编写一个测试的模块


-module(distribution).
-export([a/0]).

a() ->
    hello.




首先启动远程节点,并设置cookie,载入模块


$ erl -name remote -setcookie abc

Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [kernel-poll:false]





Eshell V5.10.4  (abort with ^G)

(remote@example.com)1> c(distribution).


启动本地节点,设置同样的cookie


$ erl -name client@192.168.1.156 -setcookie abc
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:2:2] [async-threads:10] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
(client@192.168.1.156)1> rpc:call('remote@example.com',distribution,a,[]).
hello


要点

1.本地的长name,不能只写client,需要加上地址


复杂一点的例子


编写一个模块


-module(remote_local).
-export([start/1,echo/2]).


start(Node)-> spawn(Node,fun()->loop() end).

loop()->
    receive
    {From,Request}->
        From!{self(),Request},
        loop()
    end.

echo(Pid,Request)->
    Pid!{self(),Request},
    receive
    {Pid,Response}->
        Response
    end.


查看远端的cookie

$ cat ~/.erlang.cookie
FELWZVCNJEFSIMPPRBD   


设置本地cookie和远端一样,并注意文件方法权限


apple@apple-System:~/erlang$ ll ~/.erlang.cookie
-r-------- 1 apple apple 20  1月  4 00:00 /home/apple/.erlang.cookie
apple@apple-System:~/erlang$ chmod 755 ~/.erlang.cookie
apple@apple-System:~/erlang$ echo FELWZVCNJEFSIMPPRBDI>~/.erlang.cookie
apple@apple-System:~/erlang$ chmod 400 ~/.erlang.cookie
apple@apple-System:~/erlang$ ll ~/.erlang.cookie
-r-------- 1 apple apple 21  1月  5 03:17 /home/apple/.erlang.cookie


启动远端节点,并载入模块


apple@example:~/erlang$ erl -name gandalf
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [kernel-poll:false]

Eshell V5.10.4  (abort with ^G)
(gandalf@example.com)1> c(remote_local).
{ok,remote_local}


启动本地节点载入模块,测试


apple@apple-System:~/erlang$ erl -name bilbo@192.168.1.153
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:2:2] [async-threads:10] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
(bilbo@192.168.1.153)1> c(remote_local).          
{ok,remote_local}
(bilbo@192.168.1.153)2> Pid=remote_local:start('gandalf@example.com').
<9747.49.0>
(bilbo@192.168.1.153)3> remote_local:echo(Pid,hello).
hello
(bilbo@192.168.1.153)4> remote_local:echo(Pid,hi).     
hi
(bilbo@192.168.1.153)5>












目录
相关文章
|
缓存 安全 网络协议
手把手教你如何搭建自己的文件服务器
由于FTP、HTTP、Telnet等协议的数据都是使用明文进行传输的,因此从设计上就是不可靠的。人们为了满足以密文方式传输文件的需求,发明了vsftpd服务程序。vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费。此外,它还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。在不影响使用的前提下,管理者可以自行决定客户端是采用匿名开放、本地用户还是虚拟用户的验证方式来登录vsftpd服务器。这样即便黑客拿到了虚拟用户的账号密码,也不见得能成功登录vsftpd服
2502 0
|
Ubuntu Linux
荔枝派Zero(全志V3S)烧录Uboot、Kernel及rootfs到SD卡并运行在板子上
通过前面 Uboot编译及配置 我们获得了 u-boot-sunxi-with-spl.bin 通过前面 Kernel编译 我们获得了zImage镜像文件及sun8i-v3s-licheepi-zero-dock.dtb设备树文件
996 1
|
存储 网络协议 C语言
一文带你秒懂 字节序(byte order),比特序(bit order),位域(bit field)
一文带你秒懂 字节序(byte order),比特序(bit order),位域(bit field)
1538 0
|
6月前
|
机器学习/深度学习 编解码 缓存
通义万相首尾帧图模型一键生成特效视频!
本文介绍了阿里通义发布的Wan2.1系列模型及其首尾帧生视频功能。该模型采用先进的DiT架构,通过高效的VAE模型降低运算成本,同时利用Full Attention机制确保生成视频的时间与空间一致性。模型训练分为三个阶段,逐步优化首尾帧生成能力及细节复刻效果。此外,文章展示了具体案例,并详细说明了训练和推理优化方法。目前,该模型已开源。
897 9
|
存储 关系型数据库 MySQL
【MySQL】MySQL表设计的经验(建议收藏)
【MySQL】MySQL表设计的经验(建议收藏)
3752 3
【MySQL】MySQL表设计的经验(建议收藏)
|
SQL Oracle 关系型数据库
【操作宝典】Navicat+MySQL:极简教程,轻松玩转数据库!
【操作宝典】Navicat+MySQL:极简教程,轻松玩转数据库!
743 1
|
存储 SQL 关系型数据库
MySQL数据库范式详解
范式是数据库设计中的一种理论方法,旨在通过减少数据冗余来提高数据存储的有效性和完整性。在MySQL数据库中,范式设计是一个重要的概念,它有助于组织和管理数据,确保数据的一致性和可靠性。本文将深入探讨数据库范式,包括不同范式的概念、优缺点以及示例代码。
2151 2
|
自然语言处理
第4章 MATLAB编程基础——4.5 脚本与函数(1)
第4章 MATLAB编程基础——4.5 脚本与函数(1)
|
Kubernetes 容器
005_部署nginx-ingress
005_部署nginx-ingress
246 0
elementUI 的el-select组件编辑时点击没反应效果demo(整理)
elementUI 的el-select组件编辑时点击没反应效果demo(整理)

热门文章

最新文章