《Erlang分布式编程》.docx

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《Erlang分布式编程》.docx

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 %%%====

文档评论(0)

ucut + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档