Erlang--分布式编程

(一)分布式编程:

1、基本概念:

1、分布式编程:通过网络间的消息传递,来协调不同机器,从而共同完成一个任务。

2、节点          :一个分布式系统中的一个需要被协调,并且独立的系统

3、Erlang的分布式:

1、分布式Erlang

2、基于套接字的分布式模型

2、分布式Erlang:

1、cookie保护系统:  只有cookie相同的机器间,才能通信

2、设置cookie:

1、在文件$HOME/.erlang.cookie, 将这个文件中的字符串,复制到其它节点上去

2、启动erlang时,用命令行参数"-setcookie XXXX", 将cookie设置为XXXX

3、内置函数erlang:set_cookie(node(), XXXX),  将node()的cookie设置为XXXX

3、分布式Erlang的特点:

1、cookie只用来初始认证,其它时刻的会话都是未加密的

2、适合运行在一个可信任的环境中

4、分布式编程的库和内置函数:

1、库:

1、rpc, 提供了远程调用服务

2、global, 提供分布式里的注册和加锁,以及维护一个全连接网络

2、内置函数(BIF):

1、spawn(node, Fun)

2、spawn(node, Mod, Func, Args)

3、spawn_link(node, Mod, Func, Args)

4、spawn_link(node, Fun)

5、disconnect_node(node)

6、monitor_node(node, flag)

7、node(),  返回本地节点名字,如果不是分布式,返回[email protected]

8、nodes(), 返回一个列表,表示所有与本机相连的node

9、is_alive(), 判断本地节点是否活动

3、分布式Erlang的例子:

demo.erl

-module(demo).
-export([rpc/4, start/1]).
start(Node) ->
    spawn(Node, fun() -> loop() end).
rpc(Pid, M, F, A) ->
    Pid ! {rpc, self(), M, F, A},
    receive
        {Pid, Response} ->
            Response
    end.
loop() ->
    receive
        {rpc, Pid, M, F, A} ->
            Pid ! {self(), (catch apply(M, F, A))},
            loop()
    end.

运行步骤:

1、在一台机器上A运行  :erl -sname aa -setcookie abc

2、在另一台机器B上运行:  erl -sname bb -setcookie abc

3、在A机器上运行        :

1、Pid = demo:start(‘[email protected]‘).

2、demo:rpc(Pid, erlang, node, []).

3、基于套接字的分布式Erlang:

1、在《Erlang程序设计(第二版)》中有一个lib_chan的例子:

1、思路:

1、通过Socket建立连接

2、因为套接字进程(如果某一个进程创建了一个通信Socket,那么当Socket有数据到达时,该进程

就会收到数据), 所以当两台连接后,就把套接字进程作为中间人,如果需要把消息发往另一个

节点,就向该中间人发送数据,此时中间人就是另一个节点的代表,但其它在中间人的内部实现

,就是一个转发的功能,将接受到的数据转发到另一个节点,因为中间人是一个进程,所以就将

两个节点的通信转换成两个进程间的通信,因为进程间的通信比较方便,而且也是基于TCP的,

所以其安全性、稳定性也得到了保证

2、图示:

时间: 2024-08-05 19:34:33

Erlang--分布式编程的相关文章

Erlang 103 Erlang分布式编程.- 缺2~4

Outline 笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期              变更说明 2014-11-23 A Outline   A 1.1-1.22014-12-08 A 1.3 Agenda 0范围 节点和通信 基本分布式编程模块 empd进程 套接字编程 1 Erlang节点和通信 1.1节点 一个Erlang节点是已命名的(named)的正在运行的Erlang运行时系统(erts). 多个节点可以运行在一台

erlang分布式编程模型

erlang分布式编程有两种模型 一.分布式erlang 运行在可信的网络环境中 1.rpc提供的远程过程调用 rpc:call(Node,Mode,Fun,Args) ->Result|{badrpc,Reason} 2.global里的函数可以用来在分布式系统里注册名称和加锁,以及维护一个全连接网络 spawn(Node,Fun) -> Pid spawn(Node,Mode,Fun,Args) ->Pid spawn_link(Node,Fun) -> Pid spawn_l

《erlang程序设计》学习笔记-第3章 分布式编程

http://blog.csdn.net/karl_max/article/details/3985382 1. erlang分布式编程的基本模型 (1) 分布式erlang:这种模型可以让我们在一个紧密耦合的计算机集群上编写程序. (2) 分布式erlang应用程序运行在一个可个这个进程的环境中.一个局域网的不同集群之间,但在同一个防火墙里面. (3) 基于套接字的分布式应用:使用TCP/IP套接字,我们可以编写运行在非信任环境中的分布式应用程序.2. 编写分布式程序的步骤: (1)先在一个非

Erlang 102 Erlang并发编程 - should be done in 2014-11-09

笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期              变更说明2014-11-02 A outline,1 Agenda 0 范围 Erlang的现实世界建模方式 Erlang进程创建 Erlang进程设计模式 Erlang进程错误处理 1 Erlang Concurrency Modeling Philosophy Armstrong在[2]中跳出程序语言在处理并发应用场景时洋洋洒洒的急迫性.跃跃欲试的一站式

Erlang分布式在linux和windows上的注意事项

没事做,就在两台机器间测试下Erlang分布式的例子,一个台是windowsXP,一台装的redHat9,没有详细的文档,自己摸索着搞成功了,记录下. 1.首先,分布式Erlang的实现提供了自有的安全机制来预防未经授权的Erlang系统访问.Erlang系统与别的机器进行交互时必须有同样的magic cookie,保存在一个称为.erlang.cookie的文件中,为了在两台不同机器间测试,需要编辑一份.erlang.cookie,内容随便,比如:just_test 然后将这份文件拷贝到win

Erlang入门(三)——分布式编程

明天要回家一个星期了,好好休息下.今天找到别人翻译的Erlang编程手册,值的好好读一遍.    所谓分布式的Erlang应用是运行在一系列Erlang节点组成的网络之上.这样的系统的性质与单一节点上的Erlang系统并没有什么不同.分布式这是个“大词”,Erlang从语言原生角度支持分布式编程,相比于java简单不少.一.分布式机制下列的BIFs是用于分布式编程:spawn(Node, Mod, Func, Args)启动远程节点的一个进程 spawn_link(Node, Mod, Func

erlang分布式入门(一)-ping pong

erlang分布式入门(一)-ping pong 测试环境和http://willvvv.iteye.com/blog/1523918 一样,192.168.0.182(centos-182)和192.168.0.183(centos-183), 1.按照上面链接(步骤1-4)设置通过ssh hostname 免输入密码直接登录. 2.设置erlang的magiccookie,由于都是以root账号操作,分别在两台机子上执行以下命令 cd /root vi .erlang.cookie 输入 S

Erlang OTP编程初体验——gen_server和行为模式

http://blog.sina.com.cn/s/blog_3fe961ae0101k4p6.html 行为模式其实非常类似于面向对象语言中的接口,至少笔者是这么理解的.OTP行为模式将一些反复出现的模式分成了两个部分,通用部分和具体应用相关的实现部分,这一过程其实就类似于面向对象编程中的抽象出接口的过程.本文给出一个OTP中最常见的行为模式的示例:通用服务器,即gen_server. 编写gen_server回调模块大致包括3相步骤: (1) 确定回调模块的名称: (2) 写接口函数(由客户

MapReduce分布式编程模型

hdfs的副本的配置修改hdfs-site.xml文件<property><name>dfs.namenode.secondary.http-address</name><value>hd-02:50090</value></property>需要同步到其它机器:scp hdfs-site.xml hd-02:$PWDhadoop启动方式1)启动hdfs集群$ start-dfs.sh2)启动yarn集群$ start-yarn.sh

Erlang网络编程中的一个特别的函数prim_inet:async_accept/2(转)

为了研究怎么用Erlang写一个游戏服务器,我很幸运的下到了一份英雄远征的服务器Erlang源码,这两天花了点时间看代码,其中看到做TCP的accept动作时,它是用的一个函数prim_inet:async_accept/2,这个可跟书上说的不一样(一般来说书上教的是用gen_tcp:accept/1),于是我google了一下,发现找不到文档,再翻一下发现已经有不少人问为什么这是一个undocumented的函数,也就是说Erlang就没想让你去用这个函数,所以文档自然没提供.一般来说undo