Erlang节点的连接
来源:互联网 发布:淘宝子账号禁言 认证 编辑:程序博客网 时间:2024/05/05 06:43
副标题:《Programming Erlang》第十章 分布式编程 读书笔记
题外话:很久没更新blog了,前阵子又是工作忙,又是要考试,实在没精力写blog。倒是攒了不少材料,以后慢慢添吧。
这章最重要的内容就是erlang中两个节点之间的连接规则。
同一台机器上的两个节点之间的连接很简单,直接照着书上做就行了,比较麻烦的是不同机器之间节点的连接。
书中的部分代码我测试的结果是错的,猜测可能和erlang的版本有关,也有可能和环境有配置关。
首先,需要解释一下long name和short name之间的区别。
举例来说,
erl -name li@Server1.com
erl -name li@10.68.8.50
这是long name,用'-name'标识。
erl -sname li@Server1
erl -sname li
这是short name,用'-sname'标识。
从格式上来说,short name后面跟的域名不能是IP,也不能够带有‘.’,比如不能是'Server1.com'而只能是'Server1'。
从用法上来说,
如果两个节点运行在一个机器上,就用 sname,
比如'erl -sname li','erl -sname liu'
如果两个节点运行在不同的机器上,且两个机器运行在不同的网段,那么必须用long name,
比如'erl -name li@Server1.com',erlang会通过DNS解析出名字中的域名,找到对应的机器
如果两个节点运行在不同的机器上,但两个机器在同一个子网中,那么可以和上面一样用long name方式,
比如 'erl -name li@Server1.com','erl -name li@10.68.8.50'
也可以用sname,但是必须保证sname的名字在/etc/hosts中能找到对应的IP,
比如 'erl -name li@Server1',这时候/etc/hosts中需要添加 'Server1 10.68.8.51'
总而言之,如果需要用到DNS,那么必须使用long name,如果不需要用到DNS,可以使用sname,但需要设置/etc/hosts。
了解了long name和short name的区别,下面的部分就容易了。
以书中的代码为例,假设现在有两台机器A和B,静态IP分别为10.68.8.50和10.68.8.51,机器名分别为Server1.aaa.com和Server2.aaa.com,且在同一个子网中,那么可以实验如下操作:
方案1:
A,B: erl -sname gandalf@10.68.8.50/51
结果:错误,如果域名是IP,必须是-name
方案2:
A: 设置/etc/hosts,添加 'Server2 10.68.8.51'
erl -sname gandalf@Server1 -setcookie abc
......
kvs:start().
B: 设置/etc/hosts,添加 'Server1 10.68.8.50'
erl -sname bilbo@Server2 -setcookie abc
> rpc:call(gandalf@Server1, kvs, store, [weather, fine]).
结果: 正确输出。
方案3:
A: erl -name gandalf@10.68.8.50 -setcookie abc
......
kvs:start().
B: erl -name bilbo@10.68.8.51 -setcookie abc
> rpc:call(’gandalf@10.68.8.50‘, kvs, store, [weather, fine]).
结果: 正确输出。
注意:在rpc:call中,gandalf@10.68.8.50必须加上单引号,否则识别不了正确的IP
方案4:
A: erl -name gandalf@Server1.aaa.com -setcookie abc
......
kvs:start().
B: erl -name bilbo@Server2.aaa.com -setcookie abc
> rpc:call(gandalf@Server1.aaa.com, kvs, store, [weather, fine]).
结果: 如果DNS能够解析Server1.aaa.com,那么结果正确。否则找不到对应的节点。
- Erlang节点的连接
- Erlang节点的连接
- Erlang节点连接
- Erlang的hidden节点
- [Erlang]Erlang与C的节点通信
- [Erlang危机](4.0)连接远程节点
- 关于erlang节点显示“*** Terminating erlang”的问题
- erlang分布式之节点自动连接相关问题
- erlang分布式之节点自动连接相关问题
- erlang与java构建的节点通讯
- erlang不同节点进程如何通讯的
- Erlang与C构建的节点通讯
- Erlang与C构建的节点通讯
- Erlang与C构建的节点通讯
- Erlang数据库-(一)Erlang与Mysql的连接
- erlang 服务节点名称
- erlang 启动多节点
- erlang节点编程
- 游戏引擎内核.Sound类
- 结算模式转变
- 今天开始进驻csdn
- asp.net缓存页面
- 如何掌控一天的24小时?
- Erlang节点的连接
- 30岁前不要在乎的29件事
- SQL2005CLR函数扩展-环比计算
- Java虚拟机
- 编写高性能SQL
- Tomcat下JSP、Servlet和JavaBean环境的配置
- 本地分区索引如何确定表空间
- PHP页面编码统一
- 连接access,update失败!