OTP行为:gen_fsm; gen_event。实际例子?

时间:2014-01-04 04:24:07

标签: erlang behavior otp

我已经使用了supervisor和gen_server行为,我可以理解它们的实际用途。但是,我并不真正理解gen_fsm和gen_event行为的使用。有人可以用实际例子澄清吗?

提前致谢

3 个答案:

答案 0 :(得分:4)

FSM的一个典型示例是手动提及的超时锁定,

我根据自己的经验实现的另一个例子是电话线,因为电话有状态,如振铃,连接,断开连接等等,有些操作是允许的,有些操作是不允许的。

事件的示例是https://github.com/basho/lager

中使用的日志记录

答案 1 :(得分:3)

gen_fsm是有限状态机的一个简洁实现,你可以做与gen_server大致相同的事情,此外还可以轻松管理应用程序的不同状态(例如在游戏服务器中选择一个级别,表,修改播放器属性,播放,保存,恢复......)。

gen-event是一种简单的事件分派方式,你的应用程序将所有事件发送给gen_event,对于潜在的用法一无所知,你动态地添加和删除处理程序,具有不同的行为(登录文件,在数据库中,显示信息)在图形界面...)。我使用它来获得应用程序的进程状态和通信的图形视图,以及用于性能分析的文件日志。

答案 2 :(得分:3)

您可以在这里找到一些很好的例子:

Event handlers”和“Finite State Machines

的gen_fsm:

  

gen_fsm行为有点类似于gen_server   它的专门版本。最大的区别在于   比处理调用和强制转换,我们处理同步和   异步事件。就像我们的狗和猫的例子一样,每个州都是   由函数表示。再次,我们将通过我们的回调   模块需要实现才能工作。

gen_event:

  

gen_event行为与gen_server和   gen_fsm行为,你永远不会真正开始一个过程。   gen_event行为基本上运行接受和的进程   调用函数,您只提供具有这些函数的模块。   这就是说,你与事件无关   操作除了以一种格式给出你的回调函数   请活动经理。所有管理都是免费的;只有你   提供您的应用程序的具体内容。这不是真的   令人惊讶的是,考虑到OTP,所有关于分离什么是通用的   来自具体。