首页 > 代码库 > Erlang--分布式编程
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(), 返回本地节点名字,如果不是分布式,返回nonode@nohost
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(‘bb@192.168.100.1‘).
2、demo:rpc(Pid, erlang, node, []).
3、基于套接字的分布式Erlang:
1、在《Erlang程序设计(第二版)》中有一个lib_chan的例子:
1、思路:
1、通过Socket建立连接
2、因为套接字进程(如果某一个进程创建了一个通信Socket,那么当Socket有数据到达时,该进程
就会收到数据), 所以当两台连接后,就把套接字进程作为中间人,如果需要把消息发往另一个
节点,就向该中间人发送数据,此时中间人就是另一个节点的代表,但其它在中间人的内部实现
,就是一个转发的功能,将接受到的数据转发到另一个节点,因为中间人是一个进程,所以就将
两个节点的通信转换成两个进程间的通信,因为进程间的通信比较方便,而且也是基于TCP的,
所以其安全性、稳定性也得到了保证
2、图示:
Erlang--分布式编程