当前位置: 首页 > news >正文

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>












相关文章:

  • AAC头部格式,RTP打包格式
  • JNDI学习总结(3)——Tomcat下使用C3P0配置JNDI数据源
  • 51 Nod 1057 N的阶乘【Java大数乱搞】
  • 矛与盾——扫描器盲打对主动安全防护的启示
  • Linux运行级别的配置文件
  • Swift Strings and Characters
  • Munin监控的安装与配置
  • [转载]PhotoShop性能优化
  • [转]公钥,私钥和数字签名这样最好理解
  • 利用国内的源安装 Python第三方库
  • .net反编译的九款神器
  • Spring Cloud Config
  • HADOOP单机系统安装
  • ASCLL
  • “大数据应用场景”之隔壁老王(连载四)
  • 【Leetcode】104. 二叉树的最大深度
  • 3.7、@ResponseBody 和 @RestController
  • AngularJS指令开发(1)——参数详解
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Druid 在有赞的实践
  • ES2017异步函数现已正式可用
  • java取消线程实例
  • Kibana配置logstash,报表一体化
  • laravel with 查询列表限制条数
  • Linux链接文件
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React组件设计模式(一)
  • Redis字符串类型内部编码剖析
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 使用 Docker 部署 Spring Boot项目
  • 数据结构java版之冒泡排序及优化
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​马来语翻译中文去哪比较好?
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (LeetCode) T14. Longest Common Prefix
  • (NSDate) 时间 (time )比较
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (算法)求1到1亿间的质数或素数
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • *上位机的定义
  • .chm格式文件如何阅读
  • .md即markdown文件的基本常用编写语法
  • .NET Core 中插件式开发实现
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • 。Net下Windows服务程序开发疑惑
  • @staticmethod和@classmethod的作用与区别
  • [20171106]配置客户端连接注意.txt
  • [BUUCTF 2018]Online Tool
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [BZOJ5250][九省联考2018]秘密袭击(DP)