Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1697628
  • 博文数量: 607
  • 博客积分: 10031
  • 博客等级: 上将
  • 技术积分: 6633
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-30 17:41
文章分类

全部博文(607)

文章存档

2011年(2)

2010年(15)

2009年(58)

2008年(172)

2007年(211)

2006年(149)

我的朋友

分类: LINUX

2009-08-18 16:33:38


server4.erl
%% 1.声明接口:模块的导出函数/导入函数
-module(server4).
-export([start/2,rpc/2,swap_code/2]).
%% 2.注册服务:启动起一个服务进程并通知运行时环境
start(Name, Mod)->
    register(Name, spawn(fun()->loop(Name, Mod, Mod:init() end)).
%% 3.适配器: 把过程调用转换成消息请求
 swap_code(Name, Request)->
    rpc(Name, {swap_code, Request}).
%% 4.服务请求: 消息发送-接收
 rpc(Name, Request)->
    Name ! {self(), Request},
    receive
        {Name, crash} -> exit(rpc);
        {Name, ok, Response} -> Response
    end.
%% 5.服务响应:消息接收-发送
loop(Name, Mod, OldState)->
    receive
        {From, {swap_code, NewCallbackMod} ->
            From ! {Name, ok, ack},
            loop(Name, NewCallbackMod, OldState); %% 调换代码
        {From, Request} ->
            try Mod:handle(Request, OldState) of
                {Response, NewState} ->
                    From ! {Name, ok, Response)
            catch
                _: Why ->
                    log_the_error(Name, Request, Why)
            end
    end.


阅读(1368) | 评论(0) | 转发(0) |
0

上一篇:vim补充技巧

下一篇:黑客道培训课程简介

给主人留下些什么吧!~~