用erlang写一个gen_server函数
gen_server是Erlang/OTP中的一个模块,用于创建并管理一个进程,可以处理客户端请求,维护进程状态等。下面是一个简单的gen_server函数的示例:
-module(my_server).
-behaviour(gen_server).
%% API
-export([start/0, increment/0, get_value/0]).
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
%% State
-record(state, {count=0}).
%% API functions
start() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
increment() ->
gen_server:call(?MODULE, increment).
get_value() ->
gen_server:call(?MODULE, get_value).
%% gen_server callbacks
init([]) ->
{ok, #state{count=0}}.
handle_call(increment, _From, State) ->
{reply, ok, State#state{count=State#state.count+1}};
handle_call(get_value, _From, State) ->
{reply, State#state.count, State};
handle_call(_Request, _From, State) ->
{noreply, State}.
handle_cast(_Msg, State) ->
{noreply, State}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
这个gen_server模块有三个API函数:start,increment和get_value。start函数用于启动gen_server进程。increment函数用于向进程发送一个请求,请求计数器自增1。get_value函数用于向进程发送一个请求,请求当前计数器的值。
在init回调函数中,我们定义了一个名为state的记录类型,并初始化计数器为0。
在handle_call回调函数中,我们处理了increment和get_value请求。如果请求为increment,则将计数器加1,并回复ok;如果请求为get_value,则回复当前计数器的值。如果请求不是这两种类型,则不做任何处理。
handle_cast、handle_info、terminate和code_change回调函数在本例中没有实际用处,因此直接返回相应的默认值即可。
原文地址: https://www.cveoy.top/t/topic/EJ2 著作权归作者所有。请勿转载和采集!