郎咸武 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 © 2024
京ICP备05028076号
回复 徐继哲 2010年02月26日 星期五 18:22
回复 郎咸武 2010年02月26日 星期五 18:27