免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2300 | 回复: 0

[其他] erlang 支持事务/热代码替换的例子分析 [复制链接]

论坛徽章:
0
发表于 2009-08-18 16:33 |显示全部楼层

                                                               
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.
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16651/showart_2030899.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP