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

[url=http://fsword.iteye.com/blog/657060]上一篇[/url]写了一个服务器,包括基本的请求响应,服务关闭等功能,但是这并不是服务器的全部。

一般来说,服务器应当内部保存若干数据,这些数据参与对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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值