对于global的介绍
抄自http://veniceweb.googlecode.com/svn/trunk/public/daily_tech_doc/erlang_global_20091109.txt
1. 介绍:
这个全局服务是通过一个global_name_server的process来提供的,这个进程存在于每一个erlang node, 这个全局名字
服务在每个节点启动的时候自动启动.
这个模块在所有的链接的erlang节点的集群中实现了register_name/2和whereis_name/1的功能.一个注册名是一个pid的别名,
这个名字服务进程管理这些注册的pid,如果一个process终止,名字将自动被注销unregistered.
这些注册名储存在name table中,这个name table在每一个节点上都存在,因此名字服务的调用是快速的,当一个操作改变了
name table, 所有的节点的name table都会自动被更新.
2. 单个节点的例子:
- -module(test).
- -export([start/, rpc_call/, handle_msg/]).
- start(Name) ->
- Pid = spawn(?MODULE, handle_msg, [Name]),
- register(Name, Pid). %% 在本地node注册process的名字
- rpc_call(Name, Msg) ->
- Name ! {Msg, self()}, %% 向本地node的process发消息
- receive
- {Reply, Name} ->
- Reply
- end.
- handle_msg(Name) ->
- receive
- {stop, Pid} ->
- Pid ! {stop, Name};
- {Msg, Pid} ->
- Pid ! {"received your msg: " ++ Msg, Name},
- handle_msg(Name)
- end.
测试:
测试:
- 测试:
- 启动一个本地的process, 并注册一个名字pid1, 调用whereis/1测试,返回Pid,
- 测试通过名字pid1对进程发消息,
- 之后停止process, 再次调用whereis/1测试,返回undefined
- test:start(pid1).
- true
- whereis(pid1).
- <0.64.>
- test:rpc_call(pid1, "test - 1").
- "received your msg: test - 1"
- test:rpc_call(pid1, "test - 2").
- "received your msg: test - 2"
- test:rpc_call(pid1, stop).
- stop
- whereis(pid1).
- undefined
3. Erlang Nodes集群的例子:
- -module(test).
- -export([start/, rpc_call/, handle_msg/]).
- start(Name, Node) ->
- Pid = spawn(Node, ?MODULE, handle_msg, [Name]),
- global:register_name(Name, Pid). %% 注册global的process的名字
- rpc_call(Name, Msg) ->
- global:send(Name, {Msg, self()}), %% 向global的name消息发送方式
- receive
- {Reply, Name} ->
- Reply
- end.
- handle_msg(Name) ->
- receive
- {stop, Pid} ->
- Pid ! {stop, Name};
- {Msg, Pid} ->
- Pid ! {"received your msg: " ++ Msg, Name},
- handle_msg(Name)
- end.
测试:
在同一台机器上启动三个节点的erlang集群:
- erl -sname node1 -setcookie testcookie
- erl -sname node2 -setcookie testcookie
- erl -sname node3 -setcookie testcookie
- 在node1上启动服务:
- (node1@dev-pc)> test:start(pid1, node()).
- yes
- (node1@dev-pc)> test:rpc_call(pid1, "msg - 1").
- "received your msg: msg - 1"
- 在node2和node3上测试效果:
- (node3@dev-pc)> test:rpc_call(pid1, "msg - 3").
- "received your msg: msg - 3"
- (node2@dev-pc)> test:rpc_call(pid1, "msg - 2").
- "received your msg: msg - 2"
4. 分布式的知识补充:
- <> 如何在调用远程node上的方法?
- rpc:call(Node, Mod, Func, [Arg1, ... ArgN]).
- 会在Node上进行一次Mod:Func(Arg1, ... ArgN)调用.
- 节点名的形式是: NodeName@Host, NodeName和Host都是atom(), 其实整个节点名就是一个atom().
- <> 在不需要DNS的情况下使用erl -sname node1,
- 需要DNS的情况下使用erl -name node2
- <> 设置cookie:
- erl -setcookie testcookie
- 或者erlang:set_cookie(Node, testcookie)
- <> 如何保持两个node上的代码版本一致?
- 可以使用nl(Mod), 这个操作会使所有互联的节点上加载Mod.
- <> 判断节点的连通性: net_adm:ping(Node)
- <> node() -> Node 返回本地节点的名字
- nodes() -> [Node] 返回网络上与当前节点连接的所有其它节点列表
对于global的介绍的更多相关文章
- Vim global命令和重复操作
Vim global命令和重复操作 Vim global命令允许我们在某个指定模式的所有匹配行上运行可执行的 Ex 命令,缩写形式为 :g,其处理重复工作的效率极高. 一.Vim global命令介绍 ...
- 织梦cms常用标签
dedecms简介:织梦内容管理系统(DedeCms) 以简单.实用.开源而闻名,是国内知名的PHP开源网站管理系统,也是使用用户较多的PHP类CMS系统,在经历多年的发展,目前的版本无论在功能,还是 ...
- u-boot启动流程分析(2)_板级(board)部分
转自:http://www.wowotech.net/u-boot/boot_flow_2.html 目录: 1. 前言 2. Generic Board 3. _main 4. global dat ...
- 海思uboot启动流程详细分析(三)【转】
1. 前言 书接上文(u-boot启动流程分析(二)_平台相关部分),本文介绍u-boot启动流程中和具体版型(board)有关的部分,也即board_init_f/board_init_r所代表的. ...
- postgresql常见命令及操作
pgsql已经更新到beta11了,不同版本的服务器启动或相关命令.配置可能会有不同,所以得根据pg版本进行操作.下面记录一些工作中常用到的一些操作,主要包括服务启动.备份/恢复数据.数据目录迁移.常 ...
- PostgreSQL 数据目录结构
根目录介绍 data ├── base # use to store database file(SELECT oid, datname FROM pg_database;) ├── global # ...
- Global.asax.cs介绍
转载 http://www.cnblogs.com/tech-bird/p/3629585.html ASP.NET的配置文件 Global.asax--全局应用程序文件 Web.config--基 ...
- Vue + Webpack + Vue-loader 系列教程(1)功能介绍篇
原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ Vue-loader 是什么? vue-loader 是一个加载器,能把如下格式的 Vue ...
- Storm介绍(一)
作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 内容简介 本文是Storm系列之一,介绍了Storm的起源,Storm ...
随机推荐
- spark学习14(spark local模式运行spark程序的报错)
报错1 java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. 解 ...
- Java视频教程等百度云资源分享——更新ing
韩顺平javase(87讲)密码:hsp789 链接:https://pan.baidu.com/s/1eNCyvFcVHsd7P4gdvrFqtw密码:el1y 韩顺平javaee(66讲)密码:h ...
- 分享知识-快乐自己:能使 Oracle 索引失效的六大限制条件
Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反. 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的.or ...
- linux rpm命令安装卸载 初步使用
安装(以安装jdk为例) 1.下载后,首先把jdk-7u3-linux-x64.rpm复制到/usr/local/src#cp jdk-7u3-linux-x64.rpm /usr/local/src ...
- RedHat Linux服务器安全配置细节
1.概述 Linux服务器版本:RedHat Linux AS 2.1 对于开放式的操作系统---Linux,系统的安全设定包括系统服务最小化.限制远程存取.隐藏重要资料.修补安全漏洞.采用安全工具以 ...
- 【JAVA】IOS内购二次验证及掉单问题解决
这个估计是我踩过的最大的坑,当时做微信支付的时候也没这么坑爹,当然他俩也半斤八两... 苹果官方明确表示:验证支付时,可能会有一定的延迟.第一次处理的时间就专注的解决这个问题了,忽略了掉单的问题(稍后 ...
- ZOJ 3211 Dream City(线性DP)
Dream City Time Limit: 1 Second Memory Limit: 32768 KB JAVAMAN is visiting Dream City and he se ...
- LeetCode OJ:Recover Binary Search Tree(恢复二叉搜索树)
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- LeetCode OJ:Lowest Common Ancestor of a Binary Tree(最近公共祖先)
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
- mcake活动维护,检查 ★ ★
一.检查火狐浏览器.chrome浏览器.ie8.9.10.11是否显示正常 二.对比设计稿 三.动画添加 四.检查图片是否失真 五.ie8空按钮无法点击 六.官网banner制作