【发布时间】:2014-01-06 13:45:04
【问题描述】:
我已经使用了 supervisor 和 gen_server 行为,并且我可以理解它们的实际用途。但是,我不太了解 gen_fsm 和 gen_event 行为的使用。有人可以用实际例子澄清一下吗?
提前致谢
【问题讨论】:
标签: erlang behavior erlang-otp
我已经使用了 supervisor 和 gen_server 行为,并且我可以理解它们的实际用途。但是,我不太了解 gen_fsm 和 gen_event 行为的使用。有人可以用实际例子澄清一下吗?
提前致谢
【问题讨论】:
标签: erlang behavior erlang-otp
FSM 的一个经典示例是手册中提到的超时锁定,
根据我的经验,我实施的另一个示例是电话线,因为电话具有振铃、连接、断开等状态,并且在此状态下允许某些操作,而不允许某些操作。
事件的一个例子是https://github.com/basho/lager中使用的日志记录
【讨论】:
gen_fsm 是有限状态机的简洁实现,您可以做与使用 gen_server 所做的大致相同的事情,此外还可以轻松管理应用程序的不同状态(例如在游戏服务器中选择一个关卡,一个表,修改播放器属性,播放,保存,恢复...)。
gen-event 是一种派发事件的简单方法,您的应用程序将所有事件发送到 gen_event 对潜在用途一无所知,并且您可以动态添加和删除具有不同行为的处理程序(登录文件、数据库、显示信息在图形界面中...)。我已经使用它来获得我的应用程序的进程状态和通信的图形视图,以及用于性能分析的文件日志。
【讨论】:
你可以在这里找到一些很好的例子:
“Event handlers”和“Finite State Machines”
gen_fsm:
gen_fsm 的行为有点类似于 gen_server,因为它是 它的一个专门版本。最大的不同是 除了处理调用和强制转换,我们正在处理同步和 异步事件。就像我们的狗和猫的例子一样,每个州都是 用函数表示。再次,我们将通过我们的回调 模块需要实现才能工作。
gen_event:
gen_event 的行为与 gen_server 和 gen_fsm 行为,因为你从来没有真正开始一个过程。 gen_event 行为基本上运行接受和 调用函数,并且您只提供具有这些函数的模块。 也就是说,你与事件无关 操作,除了给你的回调函数的格式是 取悦活动经理。所有管理都是免费的;只有你 提供特定于您的应用程序的内容。这不是真的 令人惊讶的是,OTP 再次是关于分离通用的 从具体的。
【讨论】: