郎咸武

郎咸武的博客

他的个人主页  他的博客

通用服务器的例子

郎咸武  2009年09月23日 星期三 15:35 | 859次浏览 | 3条评论

通用服务器的例子 Erlang

%%%-----------------------------------------------------------
%%% File         : kv.erl
%%% Author       : lxw langxianzhe@163.com
%%% Descriptions : 实现gen_sserver
%%% Created      : 2209-09-23 by lxw
%%%-----------------------------------------------------------
%%% Exports [init/1,handle_call/3,handle_cast/2,terminate]
%%%-----------------------------------------------------------
-module(kv).
-behaviour(gen_server).
-export([start/0,stop/0,lookup/1,store/2]).
%% gen_server callbacks
-export([init/1,handle_call/3,handle_cast/2,terminate/2]).
%%============================================================

%%============================================================
%% API
%%============================================================
%%------------------------------------------------------------
%% Function:  start/0
%% Purpose: 启动服务
%% Descriptions: 调用gen_server:start_link/3
%% Args:
%% Returns: 返回调用gen_server:start_link/3 的结果
%%------------------------------------------------------------
start()->
    %执行gen_server:start_link/3
    gen_server:start_link({local,kv},kv,arg1,[]).
%%============================================================
%% API
%%============================================================
%%------------------------------------------------------------
%% Function:  stop/0
%% Purpose: 停止服务
%% Descriptions: 调用gen_server:case/2
%% Args:
%% Returns: 返回调用调用gen_server:case/2 的结果
%%------------------------------------------------------------
stop()->
    gen_server:cast(kv,stop).

%%============================================================
%% API
%%============================================================
%%------------------------------------------------------------
%% Function:  init/1
%% Purpose: 初始化服务
%% Descriptions: 在后台打印服务启动,并创建dict
%% Args: arg1
%% Returns: 返回创建得dict {ok,dict:new()}
%%------------------------------------------------------------
init(arg1)->
    io:format("Key_Value server starting~n"),
    {ok,dict:new()}.

%%============================================================
%% API
%%============================================================
%%------------------------------------------------------------
%% Function:  store/2
%% Purpose: 实现存储功能
%% Descriptions: 以Key为键,以Value 存储
%% Args: Key,Val
%% Returns: 返回调用调用gen_server:call/2 的结果
%%------------------------------------------------------------
store(Key, Val)->
    gen_server:call(kv, {store, Key, Val}).

%%============================================================
%% API
%%============================================================
%%------------------------------------------------------------
%% Function:  lookup/1
%% Purpose: 查找
%% Descriptions: 根据KEY 查找值
%% Args: Key
%% Returns: 返回调用调用gen_server:call/2 的结果
%%------------------------------------------------------------
lookup(Key)->
    gen_server:call(kv, {lookup, Key}).

%%============================================================
%% API
%%============================================================
%%------------------------------------------------------------
%% Function:  handle_call/3
%% Purpose: 远程调用
%% Descriptions: 根据不同得请求实现不同得调用
%% Args: {store, Key, Val},From,Dict
%% Returns: 返回{reply, ack, Dict1}|1/0
%%              {reply, dict:find(Key, Dict), Dict}|
%%------------------------------------------------------------
handle_call({store, Key, Val}, From, Dict)->
    Dict1 = dict:store(Key, Val, Dict),
    {reply, ack, Dict1};
handle_call({lookup, Key}, From, Dict)->
    {reply, dict:find(Key, Dict), Dict};
handle_call({lookup, crash}, From, Dict)->
    1/0.


%%============================================================
%% API
%%============================================================
%%------------------------------------------------------------
%% Function:  handle_cast/2
%% Purpose: 停止服务
%% Descriptions:
%% Args: stop,Dict
%% Returns: 返回{stop, normal, Dict}
%%------------------------------------------------------------
handle_cast(stop, Dict)->
    {stope, normal, Dict}.


%%============================================================
%% API
%%============================================================
%%------------------------------------------------------------
%% Function:  terminate/2
%% Purpose:
%% Descriptions: 服务器停止得时候调用返回值忽略
%% Args: Reason,Dict
%% Returns: void
%%------------------------------------------------------------
terminate(Reason, Dict)->
    io:format("K-V server terminating~n").




评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
徐继哲

回复 徐继哲  2010年02月26日 星期五 18:22

在学习Erlang?

1条回复

  • 郎咸武

    回复 郎咸武  2010年02月26日 星期五 18:27

    学了快一年了。算是入门了,只可惜现在的公司 不用,现在连java代码都不写了,只是自己回家写写。我只好在业务方面和管理上提高自己了。

    0条回复

電波系山寨文化科学家

回复 電波系山寨文化科学家  2009年09月23日 星期三 20:40

硬件性能越来越好,软件性能越来越差。

0条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号