erlang节点通讯

参照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}

有任何问题欢迎下方留言评论或者私聊。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值