原创作者: 自由天堂   阅读:2073次   评论:0条   更新时间:2011-06-01    
上一篇写了一个服务器,包括基本的请求响应,服务关闭等功能,但是这并不是服务器的全部。

一般来说,服务器应当内部保存若干数据,这些数据参与对request的运算,然后生成response,有时候,这些计算还会改变服务器上的数据本身。我们可以把这些数据抽象为服务器的"状态",当服务器启动时,状态数据被初始化(初始化的工作应该根据环境有所区别)。

话说的真累,其实这就是大名鼎鼎的有限状态机 :-)

看代码:

% my_server4.erl %
-module(my_server4).
-export([start/1,init/1]).

start(Env) -> spawn(my_server4,init,[Env]).

init(Env) -> 
        State = Env,
        loop(State).

loop(State) ->
    receive
        { request,From,Request } ->
            {Res,State2} = deal_with(Request,State),
            From ! {Res},
            loop(State2);
        stop ->
            io:format("process stopped.last state is ~p~n",[State])
    end.

deal_with(Request,State) -> {State,Request}.


测试

Eshell V5.7.2  (abort with ^G)
1> c(my_server4),c(my_client).
{ok,my_client}
2> C = my_client:start(),S = my_server4:start("init").
<0.45.0>
3> S ! {request, C, "changed"}.
client - {"init"}
{request,<0.44.0>,"changed"}
4> S ! stop.
process stopped.last state is "changed"
stop


评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics