文档详情

《Erlang分布式编程》.docx

发布:2016-09-13约9.33千字共21页下载文档
文本预览下载声明
Erlang分布式编程 文档版本跟踪 文档版本跟踪日期变更说明备注2014-11-23A Outline A 1.1-1.22014-12-08A 1.32014-12-13A 2, 32014-12-14A 4, M参考文献说明:A(新增)、M(修改)、D(删除) 0范围 节点和通信 基本分布式编程模块 empd进程 套接字编程 1 Erlang节点和通信 1.1节点 一个Erlang节点是已命名的(named)的正在运行的Erlang运行时系统(erts)。 多个节点可以运行在一台机器上,也可以运行在不同的机器上。之前的顺序编程、并发编程中示例实际上是在一个Erlang节点上运行的。 存活节点/可命名的节点:如果一个节点可以与其他节点通信。任何存活的节点都需要命名,命名有两种方式: (1)短名字 erl -sname sname sname在局域网中命名一个主机,已name@host给出,例:foo@zhoujiagen (2)长名字 erl -name name name给出完整的主机IP地址,可以是foo@192.168.1.103,或foo@zhoujiagen(可DNS解析的主机名)。 长名字节点只能与长名字节点通信,短名字节点只能与短名字节点通信。 节点启动和信息 erl -[s]name nodeName 命名节点方式启动 net_kernel:start([‘foo@zhoujiagen’]). 启动节点 net_kernel:stop(). 停止当前节点 node(). 查看当前节点 elrang:is_alive(). 当前节点是否存活 1.2 节点通信 节点连通性测试 net_adm:ping(‘bar@zhoujiagen’). pang:不连通,pong:连通。 Cookie 每个节点在任意时刻只有一个cookie,共享同一值的节点可以通信。 启动时设置cookie erl -sname foo -setcookie cookieValue 运行时设置cookie erlang:set_cookie(node(), cookieValue). 局限性 分布式节点通过cookie与另一远程节点建立连接后,远程节点的拥有者获得本地节点运行者用户相同的权限。远程节点能够执行spawn(YourNode, os, cmd, [“rm -rf *”]).是任何人都不想看到的。故,cookie安全通信在封闭式系统中是足够的,但在开放式系统中需要融入其他的安全通信机制,可以考虑安全套接字等。 连接性建立和配置 只要分布式Erlang节点共享相同的cookie值,它们之间就可以通信。 Erlang运行时系统(erts)在第一次引用一个节点时,自动建立连接。自动建立连接可以是通过调用net_adm:ping/1或者发送一个消息到该节点注册的进程上来完成。 连接在一起的节点,信息是共享的,具有可传递性。 net_kernel进程 每个节点的net_kernel进程负责协调分布式Erlang节点之间的操作,例如:spawn/4会被net_kernel进程转换为消息发送到远程节点的net_kernel进程上、net_kernel进程处理cookie认证。很重要的一点:用户可以修改net_kernel进程以获得期望的行为。 自动建立的可传递的连接行为的覆盖方法有:使用net_kernel模块中的函数手动的控制连接、运行erl -connect_all false拒绝节点全局的相互连接。 隐藏节点 希望覆盖默认配置下所有节点互相连接行为,只在必要时建立与其他节点的连接的时候,可以考虑隐藏节点。 启动隐藏节点: erl -sname ‘nodeName’ -hidden。 手动建立节点连接:net_kernel:connect(NodeName).。 nodes/0不会返回隐藏节点,nodes(hidden)返回隐藏节点,nodes(connected)返回隐藏节点和非隐藏节点。 1.3 远程过程调用与本地调用的区别 ?Sample: facserver/facclient[1] facserver.erl -module(facserver). %% API -export([start/0]). %%%=================================================================== %%% API %%%====
显示全部
相似文档