我已经使用了supervisor和gen_server行为,我可以理解它们的实际用途。但是,我并不真正理解gen_fsm和gen_event行为的使用。有人可以用实际例子澄清吗?
提前致谢
答案 0 :(得分:4)
FSM的一个典型示例是手动提及的超时锁定,
我根据自己的经验实现的另一个例子是电话线,因为电话有状态,如振铃,连接,断开连接等等,有些操作是允许的,有些操作是不允许的。
中使用的日志记录答案 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,所有关于分离什么是通用的 来自具体。