- 論壇徽章:
- 0
|
server4.erl
%% 1.聲明接口:模塊的導(dǎo)出函數(shù)/導(dǎo)入函數(shù)
-module(server4).
-export([start/2,rpc/2,swap_code/2]).
%% 2.注冊服務(wù):啟動起一個服務(wù)進程并通知運行時環(huán)境
start(Name, Mod)->
register(Name, spawn(fun()->loop(Name, Mod, Mod:init() end)).
%% 3.適配器: 把過程調(diào)用轉(zhuǎn)換成消息請求
swap_code(Name, Request)->
rpc(Name, {swap_code, Request}).%% 4.服務(wù)請求: 消息發(fā)送-接收
rpc(Name, Request)->
Name ! {self(), Request},
receive
{Name, crash} -> exit(rpc);
{Name, ok, Response} -> Response
end.
%% 5.服務(wù)響應(yīng):消息接收-發(fā)送
loop(Name, Mod, OldState)->
receive
{From, {swap_code, NewCallbackMod} ->
From ! {Name, ok, ack},
loop(Name, NewCallbackMod, OldState); %% 調(diào)換代碼
{From, Request} ->
try Mod:handle(Request, OldState) of
{Response, NewState} ->
From ! {Name, ok, Response)
catch
_: Why ->
log_the_error(Name, Request, Why)
end
end.
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/16651/showart_2030899.html |
|