本文是《Erlang程序设计》中分布式编程一章中的实践,其中示例代码被称为“名称服务器”,不太理解这种叫法,我觉得应该叫做Key/Value结构的存取服务器比较合适。
以下是示例代码:
下面以3种模式运行这段代码
一,在Erlang单节点运行
$ erl
1> kvs:start().
true
2> kvs:store(weather,cold).
true
3> kvs:lookup(weather).
{ok,cold}
4> kvs:lookup(anything).
undefined
二,同主机不同的Erlang节点
打开2个终端(终端A,终端B)
在终端A上启动一个Erlang节点node1
$ erl -sname node1
启动进程
(node1@vm1)1> kvs:start().
在终端B上启动一个Erlang节点node2
$ erl -sname node2
在node2调用node1的函数
(node2@vm1)3> rpc:call(‘node1@vm1’,kvs,store,[weather,fine]).
true
(node2@vm1)4> rpc:call(‘node1@vm1’,kvs,lookup,[weather]).
{ok,fine}
注: sname 是 short name 的简写形式,意为短名称,通常用于同一主机的不同节点
三,不同主机的Erlang节点
在两台机器(本文测试环境为Win7和Linux虚拟机)上分别启动Erlang节点(node-host1,node-host2)
1,node-host1
$ erl -name node-host1@192.168.1.100 -setcookie hellocookie
(node-host1@192.168.1.100)1> kvs:start().
true
2,node-host2
$ erl -name node-host2@192.168.99.100 -setcookie hellocookie
(node-host2@192.168.99.100)1> rpc:call(‘node-host1@192.168.1.100’,kvs,store,[weather,bad]).
true
(node-host2@192.168.99.100)2> rpc:call(‘node-host1@192.168.1.100’,kvs,lookup,[weather]).
{ok,bad}
注:不同主机上的节点相互调用需要有相同的cookie