Server:基本的服务器

以下是一个小小的服务器,可以用回调模块作为它的参数。
-module(server1).
-export([start/2,rpc/2]).
start(Name,Mod)->
register(Name,spawn(fun()->loop(Name,Mod,Mod:init()) end)).
rpc(Name,Request)->
Name!{self(),Request},
receive
{Name,Response}->Response
end.
loop(Name,Mod,State)->
receive
{From,Request}->
{Response,State1}=Mod:handle(Request,State),
From !{Name,Response},
loop(Name,Mod,State1)
end.
编写server1的一个回调模块,它是一个名称服务器回调模块,这段代码实际上执行两个任务,它首先充当被服务器框架代码调用的回调模块,与此同时,它还包含了将被客户端调用的接口方法,OTP的惯例是把这两类函数放在同一个模块中。
-module(name_server).
-export([init/0,add/2,find/1,handle/2]).
-import(server1,[rpc/2]).
add(Name,Place)->rpc(name_server,{add,Name,Place}).
find(Name)->rpc(name_server,{find,Name}).
init()->dict:new().
handle({add,Name,Place},Dict)->{ok,dict:store(Name,Place,Dict)};
handle({find,Name},Dict)->{dict:find(Name,Dict),Dict}.
在这里插入图片描述
Erlang程序设计(第2版)【瑞典】Joe Armstrong著,牛化成译。【M】北京:中国工信出版社与人民邮电出版社。

猜你喜欢

转载自blog.csdn.net/m0_38127487/article/details/113634552