面对软件错误构建可靠的分布式系统_笔记12
来源:互联网 发布:法兰绒哪个牌子好 知乎 编辑:程序博客网 时间:2024/05/29 13:57
6.4通用有限状态机Finite State Machine
gen_fsm
某个状态发生了事件后,应当执行某个操作,状态更新
StateName(Evnet, StateData) ->
{next_state, StateNameNew, StateDataNew}.
6.4.1通用有限状态机API
有限的几个状态,不同事件发生后,进入不同的状态。类似通道门的开闭
(1)gen_fsm:start(Name1,Mod, Arg, Options) -> Result
启动,参数见前
(2)gen_fms:send_event(Name1, Event) -> ok
发送一个事件给Name1
(3)Mod:init(Arg) -> {ok, StateName, StateData}.
初始化
(4)Mod:StateName(Event, SData) -> {nextstate, SName1, SData1}.
启动时gen_fsm:start() -> Mod:init() 返回StateName和StateData
改变状态时:gen_fsm:send_event() -> Mod:StateName)
eg:
-module(thesis_assember).
-behaviour(gen_fsm).
-export([start/0, init/1, terminate/3]).
-export([waiting/2, collecting/2,send_header/1, send_data/1]).
-define(NAME, my_simple_packet_assembler).
%% waiting and collecting,two states
start() ->
gen_fsm:start_link({local, ?NAME}, ?MODULE, arg1, []).
send_header(Len) -> gen_fsm:send_event(?NAME, Len).
send_data(Str) -> gen_fsm:send_event(?NAME, Str).
init(arg1) ->
io:format("Packet assembler starting~n"),
{ok, waiting, nil}.
waiting(N, nil) ->
{next_state, collecting, {N,0,[]}}.
collecting(Buff0, {Need, Len, Buff1}) ->
L = length(Buff0),
if
L + Len < Need ->
{next_state, collecting, {Need, Len+L,Buff1++Buff0}};
L + Len >= Need ->
Buff = Buff1 ++ Buff0,
io:format("Got data:~s~n",[Buff]),
{next_state, waiting, nil}
end.
terminate(Reason, State, Data) ->
io:format("packet assembler terminate ~p ~n",[Reason]),
true.
- 面对软件错误构建可靠的分布式系统_笔记12
- 面对软件错误构建可靠的分布式系统_笔记01
- 面对软件错误构建可靠的分布式系统_笔记02
- 面对软件错误构建可靠的分布式系统_笔记03
- 面对软件错误构建可靠的分布式系统_笔记04
- 面对软件错误构建可靠的分布式系统_笔记05
- 面对软件错误构建可靠的分布式系统_笔记06
- 面对软件错误构建可靠的分布式系统_笔记07
- 面对软件错误构建可靠的分布式系统_笔记08
- 面对软件错误构建可靠的分布式系统_笔记09
- 面对软件错误构建可靠的分布式系统_笔记10
- 面对软件错误构建可靠的分布式系统_笔记11
- 面对软件错误构建可靠的分布式系统_笔记13
- 面对软件错误构建可靠的分布式系统_笔记14
- 面对软件错误构建可靠的分布式系统-12附录
- 面对软件错误构建可靠的分布式系统-1摘要
- 面对软件错误构建可靠的分布式系统-2绪论
- 面对软件错误构建可靠的分布式系统-4Erlang
- Java Swing中JTable的使用
- 数据和服务 – 通向企业服务总线(ESB)之路
- 面对软件错误构建可靠的分布式系统_笔记10
- 征婚
- 面对软件错误构建可靠的分布式系统_笔记11
- 面对软件错误构建可靠的分布式系统_笔记12
- jQuery - UI
- 面对软件错误构建可靠的分布式系统_笔记13
- 面对软件错误构建可靠的分布式系统_笔记14
- Socket Kernel Source Chapter01 Introducation
- Socket Kernel Source Chapter02 sys_socketcall
- jQuery - fadeIn淡入效果
- Socket Kernel Source Chapter03 socket
- Class.getResourceAsStream 和 ClassLoader.getResourceAsStream