`
fsword
  • 浏览: 169108 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Erlang新手进阶笔记(2) - 有限状态机

阅读更多
上一篇写了一个服务器,包括基本的请求响应,服务关闭等功能,但是这并不是服务器的全部。

一般来说,服务器应当内部保存若干数据,这些数据参与对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


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics