erlang笔记2 gen_fsm

gen_fsm 是一个OTP的MODULE。 功能是去实现一个有限状态自动机的程序。

有限状态自动机其实是非常有用的东西,我以前曾经使用过FSM开发过一个自动游戏的机器人程序。

当你要用gen_fsm来开发一个自动机程序的基本方法是在自己的模块中behavior(gen_fsm)这个模块。

个人觉得behavior有点类似于OO语言里继承机制。gen_fsm相当于是一个已经封装好了各种自动机行为和内部数据的基本类型。而你要去开发的是一个特定的自动机程序,所以是gen_fsm这个自动机的一种特例。所以gen_fsm有点像父类,而你要开发的是去继承这个父类的子类。

如何去自定义你的状态机的行为呢?你需要在你的MODULE里提供一些callback出来,供gen_fsm调用。

需要去实现的callback:

start/1

start_link/1

init/1

terminate/3

。。。

其实有很多很多的callback, 但 不需要一一实现。

文章:

http://learnyousomeerlang.com/finite-state-machines

这文章以一个自动交易的自动机程序作为例子介绍了gen_fsm的使用。例子比较复杂,我看了6个番茄钟的时间。

然后自己尝试写了一个简单的自动机程序。

状态迁移为:

                                    idle

                               /             \

                      angry        -       happy

 感兴趣的可以看看代码:

https://coding.net/costaxu/boygirl.git 

自问自答几个问题:

Q send_event和sync_send_event的区别?

A send_event是异步请求

sync_send_event是同步请求,服务器一定会应答或者客户端超时才会函数退出。

Q sync_send_event 与 sync_send_all_state_event的区别?

A sync_send_event是每个状态自己要处理的。

sync_send_all_state_event统一由handle_sync_event回调函数来处理。               

转载于:https://my.oschina.net/costaxu/blog/294824

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值