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

dan*_*vic 5 erlang behavior erlang-otp

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

提前致谢

Mar*_*tha 4

FSM 的一个经典示例是手册中提到的超时锁定,

根据我的经验,我实现的另一个例子是电话线,因为电话有状态,例如响铃、已连接、断开连接等,并且在这些状态期间允许某些操作,而不允许某些操作。

事件的一个示例是https://github.com/basho/lager中使用的日志记录

  • 根据手册,由于每个事件处理程序都是一个回调模块,因此事件管理器将具有多个动态添加和删除的回调模块。因此 gen_event 比其他行为更能容忍回调模块错误。如果已安装事件处理程序的回调函数因 Reason 而失败,或返回错误值 Term,则事件管理器不会失败。它将通过调用回调函数 Module:terminate/2 (见下文)来删除事件处理程序,并分别给出参数 {error,{'EXIT',Reason}} 或 {error,Term}。其他事件处理程序不会受到影响。 (2认同)