参照Erlang程序设计(第2版)174页
第2阶段:客户端在一个节点,服务器在相同主机的另一个节点
服务器代码
kvs.erl
-module(kvs).
-export([start/0, store/2, lookup/1]).
start() ->
register(kvs, spawn(fun() -> loop() end)).
store(Key, Value) ->
rpc({store, Key, Value}).
lookup(Key) ->
rpc({lookup, Key}).
rpc(Q) ->
kvs ! {self(), Q},
receive
{kvs, Reply} ->
Reply
end.
loop() ->
receive
{From, {store, Key, Value}} ->
put(Key, {ok, Value}),
From ! {kvs, true},
loop();
{From, {lookup, Key}} ->
From ! {kvs, get(Key)},
loop()
end.
使用书本的erl -sname 启动会出现报错,换成erl -name就可以调用成功。成功示例如下:
打开一个shell作为服务器节点的终端,并调用 kvs:start/0 函数开启服务器
另开一个shell作为客户端节点的终端,调用 kvs:store/2 存储键值对到服务器和 kvs:lookup/1 从服务器读取值。
客户端远程调用节点的函数: rpc:call/4
rpc:call(Node, Mod, Function, Args) -> Result | {badrpc, Reason}
它会在 Node 上执行apply(Node, Mod, Function, Args),然后返回结果 Result,如果调用失败则返回 {badrpc, Reason}
有任何问题欢迎下方留言评论或者私聊。